COMP 151H - Spring 2009
You are welcome to knock on the door of the instructor any time. The TAs' office hours are posted at http://course.cs.ust.hk/comp151h/labs/.
Welcome to COMP151H! Labs will begin Tues 10 Feb, in Week 2. Tutorials will begin after that, on Mon 16 Feb.
Always check the Discussion Forum for up-to-the-minute
Discussion forum is at http://comp151.cse.ust.hk/~dekai/content/?q=forum/2.
Always read before asking/posting/emailing your question. This forum is based
on modern, powerful software, instead of using the old clunky ITSC newsgroup.
Course home page is at http://www.cs.ust.hk/~dekai/151H/.
Lab info is at http://course.cs.ust.hk/comp151h/labs/.
Welcome to the honors track COMP 151H, which takes over where COMP 104H left off. This course is designed to give you the solid software engineering experience necessary to build, extend, and maintain a realistically sized non-toy program, using both traditional and up-to-date techniques that you will need on the job. Most students find that C++ and other modern languages offer a huge, confusing variety of different and often-contradictory complexities. In this sequence you will untangle the confusion by gaining an enhanced holistic theoretical perspective, comparing and contrasting the most important paradigms of programming languages.
Understand by doing. The only way to learn languages is through serious practice. The only way to appreciate software engineering is to engineer some serious software. And by far the best way to understand programming languages is to implement one.
So, through an integrated series of programming assignments, you will use C++ to gradually implement your own complete interpreter for a real programming language that is a small but fully operational version of Scheme (or Lisp).
You will learn the most important procedural, static and dynamic object-oriented, and generic programming paradigms of C++ programming, through hands-on practice with building the basic pieces of your Scheme interpreter. The Scheme programming project will help deepen the C++ concepts you have learned, by giving you a better understanding of the functional and generic programming roots and foundations that underlie the design and effective use of STL in the C++ Standard Library. If we progress sufficiently rapidly, then we will also learn about the syntactic description and analysis of programming languages, and their runtime environments. Throughout the entire series, you will focus on developing adequate software engineering habits, so that you can continue to build, extend, and maintain the code you have built so far.
Academic Calendar Description
151. Object-oriented programming concepts and techniques. Software reuse. Classes, objects, and methods. Abstract data types. Object creation and initialization. Message passing. Class hierarchies and inheritance. Polymorphism. Templates and algorithm abstraction. Prerequisite: COMP 103 or COMP 104
- Thinking in C++, Volume One: Introduction to Standard C++ (2nd Edition), by Bruce ECKEL. Prentice-Hall, 2000. ISBN: 0-13-979809-9.
- Thinking in C++, Volume Two: Practical Programming, by Bruce ECKEL and Chuck ALLISON. Prentice-Hall, 2004. ISBN: 0-13-035313-2.
- Structure and Interpretation of Computer Programs (2nd
edition), by Harold ABELSON and Gerald Jay
SUSSMAN, with Julie SUSSMAN. MIT Press, 1984.
Full text and code are available online at no cost for both Thinking in C++ volumes at http://www.BruceEckel.com.
An official Hong Kong mirror site for fast downloading is at http://www.cs.ust.hk/~dekai/library/ECKEL_Bruce/.
Full text and code are available online at no cost for the Scheme book (Structure and Interpretation of Computer Programs) at http://mitpress.mit.edu/sicp/.
- Programming in C++: Lessons and Applications, by Timothy B. D'ORAZIO . McGraw Hill, 2003. ISBN: 978-0072424126. Your COMP 104 textbook.
- The C++ Programming Language (3rd Edition), by Bjarne STROUSTRUP. Addison-Wesley, 1997. ISBN: 0-201-88954-4. This classic reference (by the designer of C++) is a must-have for every serious C++ programmer, covering details often omitted in textbooks.
- C++ Primer (4th Edition), by Stanley B. LIPPMAN and Josee LaJOIE. Addison-Wesley, 2005. ISBN: 978-0201721485. This traditional text can be used as a first book for learning C++ but assumes that the reader is familiar with programming, and more insightful textbooks have now appeared since it was first written.
- Problem Solving with C++: The Object of Programming (6th Edition), Walter SAVITCH. Addison-Wesley, 2006. ISBN: 978-0321412690. This book gives an introduction to C++ and introduces basic programming techniques.
- C++: Effective Object-Oriented Software Construction: Concepts, Principles, Industrial Strategies, and Practices (2nd Edition), by Kayshav DATTATRI. Prentice Hall, 1999. ISBN: 978-0130867698. This book is good provided that you are fluent with C++ and it emphasizes more on the design, programming techniques, and why C++ is designed as it is now.
- Programming Languages: Concepts and Constructs (2nd Edition), by Ravi SETHI. Addison-Wesley, 1996.
- Elements of ML Programming (2nd Edition), by Jeffrey D. ULLMAN. Prentice-Hall, 1998. ISBN: 0-13-790387-1.
- Programming in Prolog (5th Edition), by William F. CLOCKSIN and Christopher S. MELLISH. Springer-Verlag, 2003. ISBN: 3-54-000678-8.
All materials submitted for grading must be your own work. You are advised against being involved in any form of copying (either copying other people's work or allowing others to copy yours). If you are found to be involved in an incident of plagiarism, you will receive a failing grade for the course and the incident will be reported for appropriate disciplinary actions.
Warning: sophisticated plagiarism detection systems are in operation!
CollaborationYou are encouraged to collaborate in study groups. However, you must write up solutions on your own. You must also acknowledge your collaborators in the write-up for each problem, whether or not they are classmates. Other cases will be dealt with as plagiarism.
The course will be graded on a curve, but no matter what the curve is, I guarantee you the following.
|If you achieve||85%||you will receive at least a||A||grade.|
Your grade will be determined by a combination of factors:
ExaminationsNo reading material is allowed during the examinations. No make-ups will be given unless prior approval is granted by the instructor, or you are in unfavorable medical condition with physician's documentation on the day of the examination. In addition, being absent at the final examination results in automatic failure of the course according to university regulations, unless prior approval is obtained from the department head.
There will be one midterm worth approximately 20%, and one final exam worth approximately 25%.
Software engineering is about communication between people. Good participation in class and/or the online forum will count for approximately 5%.
All programming assignments must be submitted by 23:00 on the due date. C++ programming assignments must be compiled using g++ on Unix and will be collected electronically using the automated CASS assignment collection system. Late assignments cannot be accepted. Sorry, in the interest of fairness, exceptions cannot be made.
Programming assignments will account for a total of approximately 40%.
All information for laboratory/tutorial assignments is at http://course.cs.ust.hk/comp151h/labs/.
Laboratory/tutorial assignments will be due Monday of the week after they are announced at 23:00. Laboratory/tutorial assignments must be in C++ on Unix and will be collected electronically using the automated CASS assignment collection system. Late assignments cannot be accepted. Sorry, in the interest of fairness, exceptions cannot be made.
You will also have the option to turn in your laboratory/tutorial assignments in lab by demonstrating to the TA. This will also give you an opportunity to get an early indication of whether your assignment is correct. If not, you may still decide to fix it, and then wait until the Monday 23:00 CASS collection to turn in your assignment.
There will be up to 10 laboratory/tutorial assignments, which in total will count for approximately 10%.
|2009.02.02||1||Lecture||Administrivia (honor statement, HKUST classroom conduct), Self-review (References, Const)||Business
Perils of JavaSchools, Bjarne
Stroustrup on Educating Software Developers, V1.Ch3,
|2009.02.06||1||Lecture||SwEngr||Introduction: C++ and software engineering (doxygen notes: Marine's, Adam's)||V1.Ch1|
|2009.02.09||2||Lecture||SwEngr||Introduction: Data abstraction (YourPets2a.cpp, YourPets2b.cpp)||V1.Ch2, V1.Ch4|
|2009.02.13||2||Lecture||Procedural||Declaration and definition (reverse_print.cpp, use_reverse_print.cpp, reverse_print.hpp)||V1.Ch5|
|2009.02.16||3||Lecture||StaticOO||Overloading and constructors||V1.Ch6|
|2009.02.20||3||Lecture||StaticOO||Destructors, Order of construction/destruction, Post Office example, argc & argv||V1.Ch6|
|2009.02.27||4||Lecture||StaticOO||Inheritance: Substitution principle||V1.Ch14|
|2009.03.02||5||Lecture||Functional||Project (Assignment 1): Encapsulation, s-expressions, cons lists, tagged unions, eval|
|2009.03.06||5||Lecture||StaticOO||Inheritance: Access control: public, protected, private||V1.Ch14|
|2009.03.09||6||Lecture||DynamicOO||Inheritance: Virtual functions||V1.Ch15|
|2009.03.13||6||Lecture||DynamicOO||Inheritance: Overriding vs overloading||V1.Ch15|
|2009.03.16||7||Lecture||Functional||Project (Assignment 2): Polymorphic reimplementation, exposing car/cdr/cons/nullp|
|2009.03.20||7||Lecture||DynamicOO||Inheritance: Abstract base classes, ex1, ex2, ex3, ex4||V1.Ch15|
|2009.03.23||8||Lecture||StaticOO||The "this" pointer||V1.Ch4|
|2009.03.27||8||Lecture||StaticOO||Inheritance: Public, private, protected inheritance||V1.
|2009.03.30||9||Lecture||Generic||Introduction to generic programming||V1.Ch16|
|2009.03.31||9||Lecture||Generic||Function and class templates (Extra lecture in lab)||V1.Ch16||A2 due|
|2009.04.06||10||Lecture||Functional||Project (Assignment 3): Exceptions, boolean operators, exposing eval & print (Extra lecture)|
|2009.04.06||10||Exam||Midterm (Rm 2303 19:00-21:00; sample exam for your practice)|
|2009.04.21||11||No lecture||A3 due|
|2009.04.24||11||Lecture||Generic||STL: Sequences & Iterators||V2.Ch6|
|2009.04.27||12||Lecture||Generic||STL: Introduction to algorithms||V2.Ch6|
|2009.05.01||12||Holiday||SwEngr||Labor Day; extra lecture given earlier: Namespaces||V1.Ch10|
|2009.05.04||13||Lecture||Generic||STL: Function pointers||V2.Ch6, ref V1.Ch3|
|2009.05.08||13||Lecture||Generic||STL: Function objects or functors||V2.Ch6|
|2009.05.11||14||Lecture||Generic||STL: More algorithms||V2.Ch6|
|2009.05.15||14||Lecture||Procedural||Scope and Parameter Passing||Ch5.1 - Ch5.4|
|2009.05.30||15||Exam||Final (Rm 2464 08:30-11:30) sample final exam plus a sample midterm and another sample midterm for your practice)|
Last updated: 2009.04.28