# Computer Science

## Course Descriptions

#### Undergraduate

##### Course Fees

In some computer science courses fees are assessed to cover the cost of materials, supplies, and tutorial support staff.

**COS 131 Web Programming**

In this course students develop actual Web pages and acquire basic skills in Web programming languages such as JavaScript, VBScript, and Active Server Pages. Other topics include: object model, event model, dynamic HTML, Web-enabled databases, and XML. Prerequisite: a programming course or instructor permission. Cr 3.

**COS 141 Visual Basic I**

Visual Basic is used to introduce students to the fundamental skills of problem solving and programming. The class includes both classroom presentation and instructor-guided laboratory sessions. Small to medium size programming projects are completed. Prerequisite: a working knowledge of the Windows operating system. Cr 3.

**COS 142 Visual Basic II**

The concepts of COS 141 are extended to present programming in an application development environment. Topics covered in this course include static and dynamic arrays, user defined data types, class modules and dynamic link library development, serial and random access files, database connectivity, advanced Visual Basic controls, ActiveX controls, and Web programming using Active Server Pages. Component Object Modeling (COM) topics will be included. Small to medium size programming projects and a comprehensive final project will be completed. Prerequisite: COS 141 or permission of the instructor. Cr 3.

**COS 160 Structured Problem Solving: Java**

An introduction to the use of digital computers for problem solving, employing the Java programming language as a vehicle. Content includes elementary control structures and data representation methods provided by Java and the object-oriented programming methodology. Course requirements include a substantial number of programming projects. This course must be taken concurrently with COS 170. Offered each semester. Prerequisite: successful completion of the USM mathematics proficiency requirement. Cr 3.

**COS 161 Algorithms in Programming**

The development of algorithms and their implementations in a higher-level programming language, with emphasis on proper design principles and advanced programming concepts. Introduction to the performance analysis of algorithms. Course requirements include substantial programming projects. Offered each semester. Prerequisites: COS 160, and working knowledge of word processing and Web browsing. Cr 4.

**COS 170 Structured Programming Laboratory**

Computational experiments will be designed to teach students how to construct reliable software using Java. Topics to be covered include: Windows system, conditional program flow, iteration, procedures and functions, and symbolic debugging. Offered each semester. This course must be taken concurrently with COS 160. Cr 1.

**COS 211 The C Programming Language**

A first course in the C programming language. This course should provide students with fundamental skills of C programming. Small to medium size programming projects will be written. Prerequisite: A previous course in problem solving and programming (e.g., COS 160) or instructor's permission. Cr 3.

**COS 214 C++ for Programmers**

Introduces the basics of C++ programming. Covers types, expressions, control structures, functions, and a brief introduction to classes and objects. This course will prepare students for further object-oriented courses. Prerequisite: a previous college-level course in problem solving and programming or instructor's permission. Cr 3.

**COS 215 Introduction to C++ for C Programmers**

The changes in the syntax and semantics of C that resulted in C++ are presented. C++ will be covered up to and including a brief introduction to classes and objects. This course will prepare students for further object-oriented courses. Prerequisite: a previous course in problem solving and programming in C (e.g., COS 211) or instructor's permission. Cr 1.

**COS 230 Programming in COBOL**

A study of the programming language used primarily in business. Prerequisite: COS 160 or analogous experience. Cr 3.

**COS 241 Java Programming**

Students will develop software using the Java programming language. Some work on connecting Java applets to Web pages using HTML will be included. Prerequisite: a previous course in problem solving and programming, or instructor's permission. Cr 3.

**COS 246 Programming Topics**

Topics to be covered may include programming languages not otherwise offered (e.g., Ada, Smalltalk), different programming methodologies (e.g., object-oriented programming), assembly languages, and other specific areas of programming. Prerequisite: COS 161 or permission of instructor. Cr 3.

**COS 250 Computer Organization**

The basic hardware, architecture, and software of computer systems are covered. Subjects include digital logic design, microprogramming, machine languages, assembly languages, and operating systems. Prerequisite: COS 161. This course must be taken concurrently with COS 255. Typically offered only in the spring semester. Cr 3.

**COS 255 Computer Organization Laboratory**

Students design, build, and test combinational and sequential logic circuits and write assembly language programs. Typically offered only in the spring semester. This course must be taken concurrently with COS 250. Cr 1.

**COS 280 Discrete Mathematics II**

Concepts of modern algebra, set theory, Boolean algebra and predicate logic, elements of graph theory, and their application to computer science. This course emphasizes a syntactic approach to proof discovery. Typically offered only in the fall semester. Prerequisites: MAT 145 and COS 160. Cr 4.

**COS 285 Data Structures**

Basic abstract data types and their representations, fundamental algorithms, and algorithm analysis. Consideration is given to applications. Specific topics include linked structures, trees, searching and sorting, priority queues, graphs, and hashing. Course requirements include a substantial programming component. Typically offered only in the fall semester. Prerequisites: COS 161 and either of MAT 145 or MAT 152, or their equivalents. Cr 3.

**COS 350 Systems Programming**

A study of systems programming concepts and software, including the C programming language and the Unix programming environment and operating system interface. Students develop their abilities in these areas through programming exercises and projects. Typically offered only in the spring semester. Prerequisites: COS 250, COS 285. Cr 3.

**COS 360 Programming Languages**

Students will acquire principles of programming languages and systems, such as (i) core notions (syntax, semantics, types, and implementation models), (ii) differing language paradigms (procedural, object-oriented, functional, logic), their design principles, and their implications for programming along with their mathematical foundations. These principles are studied as the basis for (i) applications in modeling and design of computer software, (ii) usage of modern techniques and tools associated with programming language. Typically offered only in the fall semester. Prerequisites: COS 250, COS 285. Cr 3.

**COS 368 Graphical User Interface Design**

Principles of graphical user interface design are utilized to build working interfaces. The programming language used may vary from offering to offering. Possible languages include Java and C++. Students will work in an object-oriented, event-driven environment. Typically offered once every two years Prerequisite: COS 285 or instructor's permission. Cr 3.

**COS 374 Numerical Analysis**

A study of the theory and application of computational algorithms for interpolation, equation solving, matrix methods, integration; error analysis. Typically offered once every two years Prerequisites: MAT 252, MAT 295, COS 160, and permission of instructor. Cr 3.

**COS 398 Professional Ethics and Social Impact of Computing**

A study of ethical perspectives and social responsibilities of computer professionals. Assigned readings provide the basis for class discussions of such issues as social control and privacy, computer viruses, ACM code of professional conduct, hacking, limits of correctness in computer software, military influence on computer science research and education. Prerequisite: junior or senior standing. Typically offered in spring semester only. Cr 3.

**COS 399 Programming Autonomous Robots**

Introduction to the programming concepts involved with autonomous robotic systems. Using off-the-shelf "robot kits" students will design a simple robotic platform to meet specific goals. Then, using a common platform for the remainder of the course, students will develop their programming capabilities. Simple open-ended, feedback, and artificial intelligence systems will be explored throughout the course. Several benchmarks and robot competitions will be used to demonstrate the platform and programming learned in the course. Typically offered once every two years Prerequisite: COS 285. Cr 3.

**COS 400 Introduction to Simulation Modeling**

Introduction to general principles of discrete event simulation modeling. Topics include design of simulation models, their implementation in a computer simulation language, and analysis of simulation data. Applications will emphasize computer and communication science. Requirements include a substantial programming component. Typically offered once every two years Prerequisites: COS 285 and MAT 380 or equivalent. Cr 3.

**COS 420 Object-Oriented Design**

This course will focus on the construction of object-oriented software. Students will learn conceptual models for organizing objects and object hierarchies, an object-oriented design notation, the application of design patterns, and the use of software development methodologies such as the Agile development process. The capabilities will be used to solve relatively complex problems in a group setting. Typically offered once every two years. Prerequisite: COS 285. Cr 4.

**COS 430 Software Engineering**

This course covers methods, techniques and tools for modern software development, including topics such as requirements analysis and specification, software design, object-oriented software construction, software verification, and software maintenance. The course relies mostly on object-oriented software technology and related tools. UML is the modeling tool used in this course extended with object-oriented assertion languages such as OCL. In addition to Java, the C# technology is used as an implementation technology in order to expand the students' professional background and make use of the most recently developed industrial tools. Modern specification and verification tools such as JML (Java Modeling Language) and Spec# are used in this course. No prior knowledge of C# and its related tools is required. The course includes assignments involving analysis, design, specification, implementation and verification of object-oriented software. This course satisfies the Core Curriculum Capstone requirement. Typically offered once every two years. Prerequisites: COS 285 or COS 360 or permission of the instructor. Cr 3.

**COS 441 Software Architecture**

Successful design of complex software systems requires the ability to describe, evaluate and create systems at an architectural level of abstraction. This course introduces architectural design of complex software systems. The course considers commonly-used software system structures, techniques for designing and implementing these structures, models and formal notations for characterizing and reasoning about architectures, tools for generating specific instances of an architecture, and case studies of actual system architectures. It teaches the skills and background needed to evaluate the architectures of existing systems and to design new systems in principled ways using well-founded architectural paradigms. Prerequisite: COS 420 or COS 430. Cr 3.

**COS 444 Software Project Management**

The course covers project life cycle, including developing the charter, plans and justification, outsourcing and procurement decisions, scope management, time and cost estimation, quality control, personnel management, risk assessment, and the critical role of communication, both internal and external, to the project. Students will learn to lead and participate in significant software projects. Experts from industry will present case studies of success and failure. Typically offered once every two years. Prerequisite: COS 420 or COS 430. Cr 3.

**COS 450 Operating Systems**

Bottom up construction of a layered operating system beginning with the hardware interface and ending with the user interface. Specific topics covered include concurrent processes, process management, I/O, virtual memory, file management, resource scheduling, and performance measurement. Students are assumed to be familiar with general machine architecture, functions of system software (compilers, loaders, editors, etc.), data structures, and to have some experience with UNIX or another multiprogramming operating system. Typically offered once every two years. Prerequisites: COS 250, COS 350. Cr 3.

**COS 452 Computer Graphics**

A study of the techniques involved in computer graphics systems. Topics include: point-plotting and line drawing in two- and three-dimensional space; clipping and windowing; geometric modeling; algorithmic solutions to the hidden line and hidden surface problems. Typically offered once every two years. Prerequisite: COS 285. Cr 4.

**COS 455 Computer Architecture**

Fundamentals of the design and organization of digital computers. Topics include applications of Boolean algebra to logical design; machine algorithms used in addition, subtraction, multiplication, etc.; types of memory; synchronous and asynchronous operation; minimization of logic circuits. Also, concepts from microprocessors and large parallel computers. Typically offered once every two years Prerequisite: COS 250. Cr 3.

**COS 457 Database Systems**

Study of the methods and principles of database management systems (DBMS). Topics addressed include DBMS objectives and architecture, data models, the SQL data definition and data manipulation language, and providing Internet access to databases. The entity-relationship and relational models are emphasized and their use required in a design project. Typically offered once every two years Prerequisites: COS 280, COS 285. Cr 3.

**COS 460 Computer Networks**

An introduction to computer networks. Computer network architecture is described. Other topics include digital data communication, local area networks, wide area networks, internetworks, and the Internet. Specific technologies, including Ethernet and ATM, and protocols, including TCP/IP, will be considered in detail. Typically offered once every two years Prerequisite: COS 285. Cr 3.

**COS 465 Distributed Systems**

An introduction to the design and operation of distributed systems. Topics include client-server models, interprocess communications, RPC, replication and consistency, online transaction processing, error and fault recovery, encryption and security. Examples will be taken from extant distributed systems. Prerequisites: COS 450 and COS 460, or their equivalents, or permission of the instructor. Cr 3.

**COS 467 Performance Analysis of Distributed Systems**

The objective of the course is to learn techniques that enable assessing the performance of applications running on distributed systems. This is an important topic because software developers should have a good understanding regarding the performance of the distributed applications they develop. This course presents techniques such that the performance of distributed applications can be evaluated. Topics to be covered include queueing theory, simulation, availability, and performability modeling. Other techniques used to assess the performance of distributed systems will be introduced as needed. Prerequisites: COS 450 or COS 460, and MAT 281 or MAT 380. Cr 3.

**COS 469 Compiler Construction**

Definition of languages via context-free grammars. Organization of a compiler into phases of lexical analysis, parsing, code generation, and optimization. Students will implement a compiler for a Pascal-like language. Typically offered once every two years Prerequisite: COS 360. Cr 3.

**COS 470 Topics in Computer Science**

Topics to be covered may include philosophy of computers, history of computers, computers and society, simulation, graphics, and other advanced topics. Typically offered once every two years Prerequisite: COS 285 or permission of the instructor. Cr 3.

**COS 471 Advanced Database Systems**

This course covers object-oriented and XML database technologies, their interfacing and integration. Object-oriented topics include developments from industrial standards such as ODMG and Java Data Objects, query languages such as OQL, Java database technology, object-relational systems, and language integrated queries such as LINQ. The XML technology is represented by schema languages such as XML Schema and query languages such as XQuery. Object-oriented interfaces to XML include DOM, LINQ to XML, LINQ to XSD, as well as other industrial developments. The course includes hands-on experience with advanced database management systems. The requirements include an object-oriented software and database development project, addressed by teams, and a term paper. Typically offered once every two years Prerequisite: permission of the instructor. Cr 3.

**COS 472 Artificial Intelligence and Data Mining**

An introduction to the underlying concepts and applications of intelligent systems. Topics include heuristic search techniques, pattern matching, rule-based systems, computer representations of knowledge, and machine learning and data mining techniques. Course work includes regular labs and larger projects. Students will learn to conduct research in artificial intelligence and will complete a modest research project. Typically offered once every two years. Prerequisite: COS 350 or permission of instructor. Cr 3.

**COS 476 Advanced Object-Oriented Design**

This course considers developing object-oriented, multi-tier, Web-based applications. Topics will include object-oriented design patterns in distributed environments, software components, and software frameworks. The course also has a significant hands-on implementation component, and after having completed this course, students will have practical experience with several leading distributed object technologies, including AJAX, Web Services, Enterprise JavaBeans, JDBC, and Servlets. The course is structured so that students will work in teams to develop a medium-sized, multi-tier application that incorporates several of the technologies mentioned above. Lectures will provide an introduction to the technologies and discuss principled ways to apply these technologies. Typically offered once every two years Prerequisite: COS 420 or permission of instructor. Cr 3.

**COS 478 Advanced Java Technology**

The goal of this course is to provide an in-depth study of the most important and the more advanced components of the Java technology. The course covers topics such as concurrent object-oriented programming in Java, Java Core Reflection, the underlying virtual platform (the Java Virtual Machine), genericity (parametric polymorphism), persistence, and assertions. Programming assignments include concurrent programming, programming with parametric collection types, dynamic loading and compilation, usage of the Java reflective capabilities, and usage of persistent capabilities available in Java and in its extensions. The outcome of this course is a high-level of professional expertise in the overall Java technology. Typically offered once every two years Prerequisite: COS 360. Cr 3.

**COS 479 Software Specification and Verification**

This course combines formal and practical object-oriented software techniques in developing the following main themes of object-oriented software technology: (i) object-oriented software systems that provide efficiency and reliability based on an advanced type system and (ii) correctness and behavioral compatibility in software re-use based on object-oriented assertion languages and programming by contract methodology. Practical implications and usage of the general notions such genericity, self typing and reflection in complex software systems will be based on type systems of major object-oriented languages such as Java, C# and Eiffel. The assertion languages demonstrating the main themes in this course are JML (Java Modeling Language) and Spec# (an assertion language for C#). The programming assignments are based on a pragmatic methodology for object-oriented software construction (programming by contract) along with the associated tools including program verification techniques and systems. Typically offered once every two years Prerequisite: COS 360. Cr 3.

**COS 480 Theory of Computation**

Study of the theoretical foundations of computer science, including elements of set theory and logic, the specification of formal languages via finite automata, regular expressions, push-down automata, context free grammars, and Turing machines. Also introduces the concepts of recursive and recursively enumerable sets. Prerequisite: COS 280. Cr 3.

**COS 485 Design of Computing Algorithms**

An introduction to the design and analysis of algorithms. Techniques for designing algorithms, such as divide-and-conquer, greedy method, dynamic programming, and backtracking are emphasized and illustrated. Many problems of practical importance are covered including: minimum spanning tree, single source shortest path, traveling salesperson, and graph search. The concepts of NP-completeness are also considered. Substantial programming in a high-level language. Typically offered only in the spring semester. Prerequisite: COS 285. Cr 3.

**COS 495 Advanced Web Architectures**

The focus of communication over the Internet is shifting to computer-to-computer interaction. Standards for this interaction (ebXML, SOAP, WSFL) are now in place and maturing, and commercial use is exploding. We will survey these standards and evaluate their security, efficiency, and completeness. We will construct several case studies, including Web-based commerce. As a team, we will acquire and learn how to use available tooling, and we will put together working Web services and test their ability to interact with each other. Typically offered once every two years Prerequisites: COS 285 and junior standing. Cr 3.

**COS 497 Independent Study in Computer Science**

An opportunity for juniors and seniors who have demonstrated critical and analytical capability to pursue a project independently, charting a course and exploring an area of interest within their major field. At most, three credits of COS 497 can be used to satisfy degree requirements. Prerequisites: junior or senior standing and permission of the Department chair and instructor. Cr 1-3.

**COS 498 Computer Science Internship**

An opportunity for students to gain practical experience in computer science-related employment. The University internship program provides placement. This course is offered on a pass/fail basis only, does not fulfill any computer science requirement, and a maximum of 6 credits may be taken. Cr 3.

#### Graduate (Back to top)

Graduate level computer science courses are generally restricted to graduate students who have successfully gone through an admissions procedure, but others may take them by permission from the instructor.

**COS 540 Computer Networks**

An introduction to computer networks. Computer network architecture is described. Other topics include digital data communication, local area networks, wide area networks, internetworks, and the Internet. Specific technologies, including Ethernet and ATM, and protocols, including TCP/IP, will be considered in detail. Normally offered once every two years. Prerequisite: graduate standing. Cr 3.

**COS 541 Software Architecture**

Successful design of complex software systems requires the ability to describe, evaluate and create systems at an architectural level of abstraction. This course introduces architectural design of complex software systems. The course considers commonly-used software system structures, techniques for designing and implementing these structures, models and formal notations for characterizing and reasoning about architectures, tools for generating specific instances of an architecture, and case studies of actual system architectures. It teaches the skills and background needed to evaluate the architectures of existing systems and to design new systems in principled ways using well-founded architectural paradigms. Prerequisite: COS 420 or COS 430 or an equivalent. Cr 3.

**COS 542 Distributed Systems**

An introduction to the design and operation of distributed systems. Topics include client-server models, interprocess communications, RPC, replication and consistency, online transaction processing, error and fault recovery, encryption, and security. Examples will be taken from extant distributed systems. Students will design and implement a distributed system. Prerequisites: COS 450 and COS 460, or their equivalents, or permission of instructor. Cr 3.

**COS 543 Distributed Systems: A Second Course**

A continuation of COS 465/542, the course covers advanced topics relating to distributed systems that are not addressed in the first course. Specific topics include shared data, managing file replication, currency control, distributed transactions, fault tolerance and security. Case studies of existing systems and examination of new developments are also addressed. Normally offered once every two years. Prerequisites: COS 465 or COS 542. Cr 3.

**COS 544 Software Project Management**

Students will learn how to lead and participate in significant software projects. The course will cover the project life cycle, including developing the charter, plans, and justification; outsourcing and other procurement decisions; management of scope, time, cost, quality, personnel, and risk; and the critical role of communications inside and outside the project. Experts from industry will present case studies of success and failure. Prerequisite: previous bachelor's degree and COS 420 or COS 430. Cr 3.

**COS 545 Wireless Data Communication**

A seminar-based course that surveys the rapidly evolving field of wireless data networks. Wireless technologies, systems, and services are investigated with emphasis on existing systems and standards. Topics cover mobile data and wireless LANs. Prerequisite: COS 460, an equivalent course, or substantial experience with computer network architecture. Cr 3.

**COS 550 Operating Systems**

Topics include concurrent processes, process management, I/O, virtual memory, file management, resource scheduling and performance measurement. Prerequisite: graduate standing. Cr 3.

**COS 552 Advanced Computer Networks**

This second course in computer networks explores recent developments with particular emphasis on fiber optic high speed networks. A laboratory component involving performance evaluation of network protocols may be included. Prerequisite: MAT 380 and COS 460/540 or permission of instructor. Cr 3.

**COS 555 Advanced Computer Architecture**

This course presents topics from research areas in computer architecture as well as advanced and emerging technologies. Possible topics are parallel machines, content addressable memories, VLSI systems. Prerequisite: COS 455. Cr 3.

**COS 558 Database Systems**

Study of the methods and principles of database management systems (DBMS). Topics addressed include DBMS objectives and architecture, data models, data definition and manipulation languages (in particular, SQL) and providing internet access to databases. The entity-relationship and relational models are emphasized and their use required in a design project. Prerequisite: graduate standing. Cr 3.

**COS 562 Performance Analysis**

The course integrates system measurement, analytic modeling, and simulation modeling to develop computer system performance evaluation techniques. The approach will be problem-oriented with emphasis on benchmarking, simulation modeling and queuing models. Subjects covered will include system measurement, operational analysis, simulation modeling, analysis of simulation results, and mean value analysis. Prerequisites: MAT 380 or equivalent and some experience with an operating system. Cr 3.

**COS 565 Software Design and Development**

A study of techniques and approaches related to the design and development of large scale software products. Consideration of formal methods for specification, analysis, design, implementation, and testing. A "large" group programming project will be the vehicle for much of the learning in this course. Cr 3.

**COS 566 Simulation and Analytical Modeling**

The theoretical limitations of analytical modeling will be contrasted with the practical limitations of simulation. The BCMP family of analytical models will be presented along with the computational solutions of these models. The use of simulation will be discussed with regard to a high level language (such as SIM-SCRIPT). Such topics as model verification and evaluation of experimental results will be considered. Cr 3.

**COS 567 Performance Analysis of Distributed Systems**

The objective of the course is to learn techniques to assess the performance of applications running in a distributed manner. Such assessment is important for developers to understand the behavior of the distributed applications they create, and to identify aspects of the applications that are determining performance. The course presents a variety of evaluation techniques, including queueing theory, simulation, and availability and performability modeling. Other techniques will be introduced as needed. Prerequisite: Previous bachelor's degree, COS 450 or COS 460, and MAT 281 or MAT 380. Cr 3.

**COS 569 Compiler Construction**

Definition of languages via context-free grammars. Organization of a compiler into phases of lexical analysis, parsing, code generation, and optimization. Students will implement a compiler for a Pascal-like language. Normally offered once every two years. Prerequisite: graduate standing. Cr 3.

**COS 570 Seminar: Advanced Topics in Computer Science**

Topics vary from year to year. Will include current research, emerging technologies, case studies. Normally offered once every two years. Cr 3.

**COS 571 Advanced Database Systems**

This course covers advanced, post-relational database systems such as object-oriented databases, XML database technologies, integration of different technologies such as LINQ, object oriented interfaces to XML and integration with the object-oriented technology. Object-oriented topics include developments from industrial standards such as ODMG and Java Data Objects, query languages such as OQL, Java database technology, object-relational systems and language integrated queries such as LINQ. Object-oriented interfaces to XML include DOM, LINQ to XML, LINQ to XSD, as well as other industrial developments. The course includes hands-on experience with advanced database management systems such as db4 and Objectivity, LINQ, and object-oriented interfaces to XML. The requirements include object-oriented software and database development projects, and a term paper. Normally offered once every two years. Prerequisite: Permission of the instructor. Cr 3.

**COS 572 Artificial Intelligence and Data Mining**

An introduction to the underlying concepts and applications of intelligent systems. Topics include heuristic search techniques, pattern matching, rule-based systems, computer representations of knowledge, and machine learning and data mining techniques. Course work includes regular labs and larger projects. Students will learn to conduct research in artificial intelligence and will complete a modest research project. Typically offered once every two years. Prerequisite: COS 350 or permission of instructor. Cr 3.

**COS 574 Advanced Computer Graphics**

Advanced computer graphics techniques are described and analyzed. Subjects considered include the projection of 3D objects to 2D, hierarchical object representation, representation of 3D curves and surfaces, illumination and shading, solid modeling, and advanced graphics hardware. Prerequisite: COS 452 or permission of instructor. Cr 3.

**COS 576 Advanced Object-Oriented Design**

This course considers developing object-oriented, multi-tier, Web-based applications. Topics will include object-oriented design patterns in distributed environments, software components, and software frameworks. The course also has a significant hands-on implementation component, and, after completing this course, students will have practical experience with several leading-edge distributed object technologies, including AJAX, Web Services, Enterprise JavaBeans, JDBC, and Servlets. The course is structured so that students will work in teams to develop a medium-sized, multi-tier application that incorporates several of the technologies mentioned above. Lectures will provide an introduction to the technologies and discuss principled ways to apply these technologies. Normally offered once every two years. Prerequisites: COS 420 or COS 430, or permission of instructor. Cr 3.

**COS 578 Advanced Java Technology**

The goal of this course is to provide an in-depth study of the most important and the more advanced components of the Java technology. The course covers topics such as concurrent object-oriented programming in Java, Java Core Reflection, the underlying virtual platform (the Java Virtual Machine), genericity (parametric polymorphism), persistence, and assertions. Programming assignments include concurrent programming, programming with parametric collection types, dynamic loading and compilation, usage of the Java reflective capabilities, and usage of persistent capabilities available in Java and in its extensions. The outcome of this course is a high-level of professional expertise in the overall Java technology. Normally offered once every two years. Prerequisite: COS 360. Cr 3.

**COS 579 Software Specification and Verification**

This course combines formal and practical object-oriented software techniques in developing the following main themes of object-oriented software technology: (i) Object-oriented software systems that provide efficiency and reliability based on an advanced type system, and (ii) Correctness and component compatibility in software reuse based on object-oriented assertion languages and programming by contract methodology. Practical implications and usage of the general notions such as genericity and reflection in complex software systems will be based on type systems of major object oriented languages such as Java and C\#. The emerging technology of object-oriented assertion languages and verification systems will be represented in this course by JML (Java Modeling Language), Spec\# (an assertion language for C\#), and Eiffel and Code Contracts. The programming assignments will be based on a pragmatic methodology for object-oriented software construction (programming by contract) along with the associated tools including program verification techniques and systems. The assignments will include usage of advanced typing notions, reflection, and static and dynamic verification of object-oriented software. Normally offered once every two years. Prerequisites: COS 360. Cr 3.

**COS 580 Advanced Theory of Computation: Computability and Complexity**

Explores the nature of computation from a mathematical point of view, and determines why many fundamentally important computational problems apparently have no efficient solution, or even no solution at all. Topics include models of computation, the Church-Turing thesis, computably enumerable sets, nondecidable problems, the Halting Problem, resource-bounded complexity classes, NP-complete and NP-hard problems, the Traveling Salesman and other optimization problems, and computational reducibility. Connections may also be drawn to the foundations of mathematics and Gödel's Incompleteness Theorem. Prerequisite: COS 480 or permission of instructor. Cr 3.

**COS 582 Design and Analysis of Algorithms**

Techniques for designing algorithms, such as divide-and-conquer, greedy method, dynamic programming, and backtracking are emphasized and illustrated. Many problems of practical importance are covered, including minimum spanning tree, single source shortest path, traveling salesperson, and graph search. The concepts of NP-completeness are also considered. Prerequisite: graduate standing. Cr 3.

**COS 595 Advanced Web Architectures**

The focus of communication over the Internet is shifting to "computer-to-computer" interaction. Standards for this interaction (ebXML, SOAP, WSFL) are now in place and maturing, and commercial use is exploding. We will survey these standards and critically evaluate their security, efficiency, and completeness. We will construct several case studies, including Web-based commerce. As a team we will acquire and learn how to use available tooling, and we will put together working Web services and test their ability to interact with each other. Normally offered once every two years. Prerequisite: graduate standing. Cr 3.

**COS 598 Internship**

Students apply their learning to a specific problem in a practical context under faculty and managerial supervision. See Departmental guidelines for more details. Prerequisites: full graduate standing and prior approval of proposal by instructor and Department chair. Cr 1-3.

**COS 697 Independent Study**

An opportunity for graduate students to pursue areas not currently offered in the graduate curriculum. Cr 3.

**COS 698 Master's Thesis**

A six-credit thesis that is one of two options for completing the Master's degree requirements. The thesis project must be supervised by a committee and the project proposal approved in advance. Offered only as a pass/fail course. Prerequisites: full graduate standing and faculty approval. Cr 6.

**COS 699 Master's Project**

A three-credit project that is one of two options for completing the Master's degree requirements. The project must be supervised by a committee and the project proposal approved in advance. Offered only as a pass/fail course. Prerequisites: full graduate standing and faculty approval. Cr 3.

**ELE 517 Robot Modeling**

This course focuses on the concepts of kinematics, statics, and the dynamics of serial manipulators, as well as on the analysis and design of robotic structures. Students will conduct case studies of multiple platforms in the Robotics and Intelligence Systems Laboratory. This course complements ELE 418. Prerequisites: ELE 210, COS 160 or permission of instructor. (Lecture 3 hrs.) Cr 3.

**ELE 542 Digital VLSI Circuits and Design**

This course will examine the principles of internal circuit and layout design of digital VLSI circuits, with an emphasis on CMOS technology. Topics include NMOS and CMOS processes, device physics and SPICE models, logic circuits, electrical and physical design of logic gates, dynamic CMOS circuits, memory, chip layout principles, parasitics, and performance estimation. Simulation, layout, and electronic design automation tools are demonstrated and used. Prerequisites: ELE 172, ELE 342. (Lecture 3 hrs; Lab 1 hr.) Cr 3.

**ELE 544 Analog Integrated Circuits and Design**

This course will examine the principles of internal circuit operation and design of analog integrated circuits, with emphasis on CMOS technology. Topics include analog CMOS processes, devices and device models, bias and reference sources, differential and high gain amplifiers, OTAs and operational amplifiers, frequency response, feedback, stability, and internal compensation with emphasis on the design of CMOS operational amplifiers, power stages, and dc regulators. SPICE simulation, layout, and electronic design automation tools are demonstrated and used in homework assignments and design projects. Prerequisite: ELE 343 or permission. (Lecture 3 hrs; Lab 1 hr.) Cr 3.

**ELE 545 Special Topics in CMOS Integrated Circuit Design**

This course will cover special topics, such as, high performance operational amplifiers, silicon integrated sensors and sensor interface circuits, switched capacitor circuits, oscillators and integrated waveform generators, phase-locked-loop circuits, and memory, among others. Three chosen topics will be emphasized and students will conduct instructor-guided projects that will culminate with chip level design of these circuits. SPICE simulation verifications, layout, and electronic design automation tools will be used extensively. Prerequisite: ELE 442/542 or ELE 444/544. (Lecture 3 hrs; Lab 1 hr.) Cr 3.

**ELE 586 Digital Signal Processing**

This course will cover the basic principles of processing digital signals. Other concepts covered will include sampling and quantization, time and frequency domain representation, analysis of discrete-time signals and systems, FIR and IIR systems, digital filter design, review of classic analog filter design (Butterworth, Chebychev), quantization and finite-precision effects, and DSP hardware. Computers will be used to design and realize various signal processors. Prerequisites: ELE 314 and COS 160 or equivalent. (Lecture 3 hrs.) Cr 3.

**ELE 589 Digital Image Processing**

This course will focus on the theory and practice of digital processing of images by computer. Students will be introduced to two-dimensional signal processing theory, including sampling, transforms, and filters. Image acquisition and representation, enhancement methods, image coding, image analysis, and image processing hardware also will be covered. Prerequisites: ELE 314 and COS 160 or equivalent. (Lecture 3 hrs; Lab 1 hr.) Cr 3.