UMUC

School of Undergraduate Studies

Course Descriptions — Computer Science (CMSC)

CMSC 101 Introductory Computer Science (3)

A study of fundamental programming concepts and constructs within an abstract (language-independent) framework. Topics include basic and structured data types, variables, and the structure of expressions. Pseudocode is used to explore the syntax and semantics of structured programming statements, functions, and the use of parameters. Programming assignments include the creation, compilation, and execution of computer programs in a modern programming language that implements these abstract concepts. The history of computing and computing ethics are also discussed. Students may receive credit for only one of the following courses: CMIS 102, CMIS 102A, or CMSC 101.

CMSC 130 Computer Science I (3)

(For students majoring in computer science. Taking CMSC 130 and 230 in consecutive terms is recommended.) Prerequisite: CMSC 101 or equivalent experience. Recommended: CMSC 150. A study of fundamental concepts that underlie objectoriented programming. Topics include the study and use of primitive and object data types and the process of creating well-designed computer programs to solve specified problems. Programming projects in Java are included.

CMSC 150 Introduction to Discrete Structures (3)

Prerequisite or corequisite: MATH 140. A survey of fundamental mathematical concepts involved in computer science. Functions, relations, finite and infinite sets, and propositional logic are explored. Proof techniques presented are those used for modeling and solving problems in computer science. Combinations, permutations, graphs, and trees are introduced, along with selected applications. Students may receive credit for only one of the following courses: CMSC 150 or CMSC 250.

CMSC 230 Computer Science II (3)

(For students majoring in computer science. Taking CMSC 130 and 230 in consecutive terms is recommended.) Prerequisites: CMSC 130 and 150. A study of the fundamental data structures in computer science. Topics include linked lists, stacks, queues, arrays, dictionaries, vectors, and trees. Algorithms that perform sorting and searching are discussed and analyzed. Programming projects in Java are included.

CMSC 311 Computer Organization (3)

Prerequisite: CMSC 130. A study of the organization of memory, input/output, and central processing units, including instruction sets, register transfer operations, control microprogramming, data representation, and arithmetic algorithms. Assembly language and digital logic circuit design are introduced. Students may receive credit for only one of the following courses: CMIS 270, CMIS 310, CMSC 311, or IFSM 310.

CMSC 325 Game Design and Development (3)

Prerequisite: CMSC 230. A project-driven study of the theory and practice of game design and development. Discussion covers critical mathematical concepts and real-time game physics necessary to build realistic graphical 3-D worlds, animate characters, and add special effects to games. Projects include collaborative development of interactive games.

CMSC 330 Advanced Programming Languages (3)

Prerequisite: CMSC 230 or CMSC 305. A comparative study of programming languages. Topics include the syntax and semantics of programming languages and run-time support required for various programming languages. Programming projects using selected languages are required.

CMSC 335 Object-Oriented and Concurrent Programming (3)

Prerequisite: CMSC 230 or CMSC 305. A study of object-oriented and concurrent programming using features of Java. Concepts of object-oriented programming (such as composition, classification, and polymorphism) are explored. Topics include the principles of concurrent programming (such as task synchronization, race conditions, deadlock, and threads). Programming projects are implemented in Java. Students may receive credit for only one of the following courses: CMSC 300 or CMSC 335.

CMSC 411 Computer System Architecture (3)

Prerequisite: CMSC 311. A discussion of input/output processors and techniques, covering their relation to intrasystem communication, including buses and caches. Discussion covers addressing and memory hierarchies, microprogramming, parallelism, and pipelining.

CMSC 412 Operating Systems (3)

Prerequisite: CMSC 311. A study of the fundamental principles underlying modern operating systems. The essential components of a typical operating system and the interactions among them are described. Methods of managing processes and resources in computer systems are discussed in detail. Programming projects that implement parts of an operating system are required.

CMSC 415 UML and Design Patterns (3)

(Designed for software engineers, systems analysts, designers, and programmers.) Prerequisite: CMSC 335. A comprehensive study of fundamental concepts of object-oriented analysis and design focusing on Unified Modeling Language (UML) and its application to the system architectural design using selected patterns as guiding models. Activities include creation of detailed object models, in conjunction with UML views and design from system requirements, using use-case models and proven patterns to refine analysis and design models. Emphasis is on expansion of the analysis into a design that is ready for implementation, with artifacts that are testable, and that exhibits scalability to easily evolve in response to changes in a given problem domain.

CMSC 420 Advanced Data Structures and Analysis (3)

Prerequisite: CMSC 230. A study of data structures (including lists and trees) in terms of their descriptions, properties, and storage allocations. Algorithms are used to manipulate structures. Applications are drawn from the areas of information retrieval, symbolic manipulation, and operating systems.

CMSC 424 Database Design (3)

Prerequisite: CMSC 130. A study of the applicability of the database approach as a mechanism for modeling the real world. Review covers the three popular data models (hierarchical, relational, and network). Permissible structures, integrity constraints, storage strategies, and query facilities are compared. The theoretical foundations of the logic used in designing a database are presented.

CMSC 425 Building Applications for Mobile Devices (3)

Prerequisites: CMSC 311 (or CMIS 310) and 230 (or CMIS 241 or CMIS 242). A hands-on, project-based introduction to the development of applications for wireless devices such as mobile phones. Integrated development environments and tools from leading companies in the industry are used to design, develop, and test wireless solutions for video gaming, wireless messaging, multimedia, and other business applications.

CMSC 430 Theory of Language Translation (3)

Prerequisites: CMSC 330 and programming experience in C or C++. An examination of the formal translation of programming languages, syntax, and semantics. Highlights include evaluation of finite-state grammars and recognizers; context-free parsing techniques such as recursive descent, precedence, LL(K), LR(K), and SLR(K); and improvement and generation of machine independent code and syntax-directed translation schema. Programming projects that implement parts of a compiler are required.

CMSC 450 Logic for Computer Science (3)

(Also listed as MATH 450.) Prerequisites: CMSC 150 and MATH 241. Elementary development of propositional logic (including the resolution method) and first-order logic (including Hebrand's unsatisfiability theorem). Discussion covers the concepts of truth and interpretation; validity, provability, and soundness; completeness and incompleteness; and decidability and semidecidability. Students may receive credit for only one of the following courses: CMSC 450, MATH 444, MATH 445, or MATH 450.

CMSC 451 Design and Analysis of Computer Algorithms (3)

Prerequisites: CMSC 150 and 230. Presentation of fundamental techniques for designing and analyzing computer algorithms. Basic methods include divide-and-conquer techniques, search and traversal techniques, dynamic programming, greedy methods, and induction.

CMSC 452 Elementary Theory of Computing (3)

Prerequisite: CMSC 311. Analysis of alternative theoretical models of computation and types of automata. Their relationship to formal grammars and languages is specified.

CMSC 480 Advanced Programming in Java (3)

Prerequisite: CMSC 335. An examination of the principles, techniques, and applications of programming in Java in the Internet environment. Topics include threads, packages, interfaces, and exceptions. Java applets are created and incorporated into Web pages. Visual development tools are reviewed. Students may receive credit for only one of the following courses: CMIS 498J, CMSC 480, or CMSC 498J.

CMSC 486A Internship in Computer Science Through Co-op (3)

Prerequisite: Formal admission to the Co-op program (program requirements are listed on p. 246). An opportunity to combine academic theory with new, career-related experience in computer science. At least 12 hours per week must be devoted to new tasks for a minimum of 180 hours during the Co-op session; four new tasks must be delineated in the Learning Proposal; and the course requirements must be completed. May be repeated upon approval of a new Learning Proposal that demonstrates new tasks and objectives related to computer science and that continues to advance application of academic theory in the workplace. Students may earn up to 15 credits in all internship coursework through Co-op toward a first bachelor's degree and up to 9 credits toward a second bachelor's degree. Co-op credits may not be used for general education requirements and, unless otherwise specified, no more than 6 Co-op credits may be used in the academic major and minor (combined).

CMSC 486B Internship in Computer Science Through Co-op (6)

Prerequisite: Formal admission to the Co-op program (program requirements are listed on p. 246). An opportunity to combine academic theory with new, career-related experience in computer science. At least 20 hours per week must be devoted to new tasks for a total of 300 hours during the Co-op session; five to eight new tasks must be delineated in the Learning Proposal; and the course requirements must be completed. May be repeated upon approval of a new Learning Proposal that demonstrates new tasks and objectives related to computer science and that continues to advance application of academic theory in the workplace. Students may earn up to 15 credits in all internship coursework through Co-op toward a first bachelor's degree and up to 9 credits toward a second bachelor's degree. Co-op credits may not be used for general education requirements and, unless otherwise specified, no more than 6 Co-op credits may be used in the academic major and minor (combined).

CMSC 495 Current Trends and Projects in Computer Science (3)

(Intended as a final, capstone course to be taken in a student's last 9 credits) Prerequisites: CMSC 330 and 335. An overview of computer science with emphasis on integration of concepts, practical application, and critical thinking. Analysis covers innovative and emerging issues in computer science. Projects use techniques and approaches previously studied; they may focus on software design and architecture, systems and application security, mobile applications, database design and implementation, concurrent programming, signal processing, algorithm performance optimization, or current issues. Assignments include working in teams throughout the analysis, design, development, implementation, testing, and documentation phases of the projects.

CMSC 498 Special Topics in Computer Science (1–3)

Prerequisites: Vary according to topic. A seminar on topics in computer science. May be repeated to a maximum of 6 credits when topics differ.