Major Courses I Am Teaching

In each course described below, there will be a description of the current assignments and due dates, and an update of the topics discussed in class so far. Other pertinent material appears in the course outline distributed on the first class meeting.

CMPT 341-- Programming Languages
CMPT 454 -- Compiler Design
CMPT 456 -- Software Engineering

CMPT 341 -- Programming Languages

Text: Sebesta, Robert W., Concepts of Programming Languages, Fourth Edition. Addison-Wesley, 1999.

Additional Primary References:

  1. Dershem, Herbert L. and Michael J. Jipping, Programming Languages: Structure and Models, Second Edition. PWS Publishing Company, 1995.
  2. Ghezzi, Carlo and Mehdi Jazayeri, Programming Language Concepts, Third Edition. John Wiley & Sons, 1998.
  3. Horowitz, Ellis, Fundamentals of Programming Languages, Second Edition. Computer Science Press, Inc., 1984.
  4. MacLennan, Bruce J., Principles of Programming Languages, Second Edition. Oxford University Press, 1987.
  5. Marcotty, Michael and Henry F. Ledgard, Programming Language Landscape, Second Edition. Science Research Associates, 1987.
  6. Sethi, Ravi, Programming Languages: Concepts and Constructs, Second Edition. Addison-Wesley, 1996.

Topics Covered in the Course:

  1. Preliminaries.
  2. A Study of Some of the Major Programming Languages: Historical Development.
  3. Syntax and Semantics.
  4. Names, Bindings, Type Checking, and Scopes.
  5. Data Types and their Implementation.
  6. Language Statements: Assignment, Conditional, Iterative, and Subprogram Calls.
  7. Abstract Data Types.
  8. Object-Oriented Programming, and Contemporary Languages Supporting OOP.
  9. Concurrent Programming.
  10. Exceptions and Exception Handling.
  11. Functional Languages: LISP and Scheme.
  12. Logic Programming: PROLOG.
CMPT 454 -- Compiler Design.

Text:  Aho A., R. Sethi, J. D. Ullman: Compilers: Principles, Techniques and Tools. Addison-Wesley, Reading, Mass., 1986.

Objectives and Purpose: To describe the underlying mathematical and programming principles used to create and design compiler software for an elementary high-level programming language. A number of key ideas from abstract program design and finite automata theory will be used to apply these principles.

Topics covered in the course:

(1) Lexical scanners.
(2) Finite-State machines.
(3) Parsers.
(4) Regular and Context-Free Languages and Grammars.
(5) LL-Parsers and LR-Parsers.
(6) Semantic Analysis and Symbol Tables.
(7) Intermediate Code Translation and Object Code.

CMPT 456 -- Software Engineering

 Text: Schach, Stephen: Classical and Object-Oriented Software Engineering, Third Edition. Irwin, 1996.

Purpose and Objectives: To introduce the student to contemporary techniques in the design, coding, testing, and maintenance of software, and to emphasize the use of teamwork as commonly practices in the industrial software development sector.

Each student will be a member of a team, whose purpose is to develop an item of commercial software from scratch, meeting periodically with the instructor, who will serve as the software coordinator. The completed project will be submitted in two forms: as paper documentation, and executable or source file. The instructor will assess the progress of the project as presented by the team members, and will suggest possible methods for its successful continuation and completion.

In addition, the student will be exposed to three popular languages used for this purpose in the commercial sector: Java, Ada and C++.

Topics covered in the course:

(1) Software Specification: The software requirements document, requirements definition, evolution, and specification. System modeling, software prototyping, forms of specification.
(2) Software Design: The classical waterfall model, object-oriented design, function-oriented design: data flow diagrams, structure charts, data dictionaries. User interface design: graphical user interfaces, command interfaces.
(3) Programming Techniques and Tools: Reliability: fault tolerance, exception handling, defensive programming. Software reuse: modularity, portability. Computer-Aided Software Engineering (CASE) tools, object management.
(4) Software Validation: Verification and validation: testing strategies, correctness. Reliability: metrics and reliability specifications. Defect testing and Testing and Debugging Tools.
(5) Software Management: Project planning and scheduling, software cost estimation. Software maintenance, configuration management. Documentation: classification, quality, preparation. Quality assurance.

Additional Primary References:

  • Arnold, K. and Gosling, J.: The Java Programming Language, Second Edition, Addison-Wesley. 1998.
  • Bishop, Judy: Java Gently, (Second Edition), Addison-Wesley International Computer Science Series, 1998.
  • Booch, Grady and Doug Bryan: Software Engineering with Ada, (Second Edition), Benjamin/Cummings, 1994.
  • Cornell, Gary and Cay S. Horstmann, Core Java, Prentice-Hall, 1997.
  • De Lillo, Nicholas J.: A First Course in Computer Science with Ada, Richard D. Irwin, Inc., 1993.
  • Ghezzi, Carlo, Mehdi Jazayeri, and Dino Mandrioli: Software Engineering, Prentice-Hall, 1991.
  • Gosling, J., Bill Joy, and Guy Steele, The Java Language Specification, Addison-Wesley, 1996.
  • Pohl, Ira: Object-Oriented Design, Benjamin/Cummings, 1993.
  • Pressman, Roger: Software Engineering, (Second Edition), McGraw-Hill, 1992.
  • Sommerville, Ian: Software Engineering, (Fourth Edition), Addison-Wesley, 1992.
Back to my home page
© 1999-2001 Manhattan College