Department of Computer Science and Technology – Course pages 2020–21: Object-Oriented Programming skip to primary navigationskip to content Study at Cambridge About the University Research at Cambridge Search site Home Study at Cambridge Undergraduate Courses Applying Events and open days Fees and finance Student blogs and videos Graduate Why Cambridge Course directory How to apply Fees and funding Frequently asked questions International students Continuing education Executive and professional education Courses in education About the University How the University and Colleges work History Visiting the University Term dates and calendars Map For media Video and audio Find an expert Publications Global Cambridge News Events Public engagement Jobs Give to Cambridge Research at Cambridge For staff For current students For alumni For business Colleges & departments Libraries & facilities Museums & collections Email & phone search Computer Laboratory Teaching Courses 2020–21 Object-Oriented Programming Department of Computer Science and Technology Undergraduate Home The department Overview People Overview Academic staff Support staff Contract researchers Fellows & affiliates PhD students Visitors Seminars Overview Wednesday Seminar Series Wheeler Lectures women@cl 10th Anniversary Computer Laboratory 75th Anniversary History Facilities Overview Reception Food Shopping and leisure Cycling Library Overview Library induction Library guides Catalogues Coronavirus resources Electronic resources Local services Lab technical reports External technical reports Resource lists Reading lists Reprographics equipment Archives Maps and directions Contact information Research Overview Artificial Intelligence Overview People Group Meetings Project ideas for current students Computer Architecture Overview Projects and research topics ACS & Part II/III Project Suggestions People Selected Publications Open source components Group Meetings Contact Details Digital Technology Graphics & Interaction Overview Research Members Projects Applying to do a PhD Project suggestions Other information Reading Club Natural Language Processing Overview People Publications Projects Postgraduate opportunities Resources Programming, Logic, Semantics Security Overview People Publications Projects and topics Security Seminar Series Meetings Courses Posters Journals Mailing lists blog Systems Overview Research Projects Members Seminars Student Projects Research support Overview Research grants Fellowships Meetings & Travel Industrial Collaboration Commercialisation Writing a proposal Impact statements Collaborating with the Computer Lab Making your work public Admissions Overview Undergraduate Computer Science at Cambridge Overview Course Open Days Apply CSAT FAQ Contact MPhil ACS Overview Modules PhD applications Research Graduate Admissions Prospectus Funding deadlines PhD degree Overview Research Graduate Admissions Prospectus Funding deadlines MPhil in Advanced Computer Science CPGS Premium Research Studentship Student Administration Teaching Overview Part IA Part IB Part II Masters courses Overview Induction for M.Phil and Part III students ACS Forms Part III and ACS projects PhD students Freshers Courses 2020–21 Overview Part IA CST Part IB CST 75% Part IB CST 50% Part II CST 75% Part II CST 50% Part III MPhil ACS Lecturer index Instructions for lecturers Undergraduate Courses 2021–22 Overview Part IA CST Part IB CST Part II CST 75% Part II CST 50% Part III MPhil ACS Lecturer index Instructions for lecturers Exams Overview Examination dates Examination results Examiners' reports Plagiarism and collusion Purchase of calculators Data Retention Policy Past exam papers Guidance on deadlines Part III Assessment MPhil Assessment Student Complaint Procedure Lecture timetables Overview Short form timetable Supervisions Overview Part II supervisions overview Part II sign-up dates Notes on supervising Supervisor support Academic exchanges Overview Advice for students visiting Cambridge UROP internships Part IB group projects Overview Timetable Photos Previous years Part II projects Overview Briefing document (Pink Book) Important dates Overseers Phase 1 report Back-up advice Resources Declaration Studies Involving Human Participants Failure to submit proposal Selection Tips Declaration of originality Submission of dissertation IP ownership Diploma model projects Older project suggestions Supervising Notes Overseer Briefing Notes Directors of Studies Resources Overview Managed Cluster Service Part III and MPhil machines Online services Installing Linux MATLAB Microsoft Azure for Education Membership Miscellaneous Overview News Honours Obituaries Overview Neil Wiseman, 1934–1995 Roger Needham, 1935–2003 David Wheeler, 1927–2004 Karen Spärck Jones, 1935–2007 Judith Ann Bailey, 1934–2008 Robin Milner, 1934–2010 Sir Maurice Wilkes, 1913–2010 Michael JC Gordon, 1948–2017 Richard Gibbens, 1962–2018 Internal information Overview New arrivals Overview An introduction to our computing facilities Information for new PhD students Information for new staff Information for visitors Information for hosts of visitors General information Induction Guidelines Specialist resources System administration Overview Email Printing and scanning Filespace The CL network SSH access to the CL systems Supported platforms Generic Unix/Linux information Web servers and sites The RT ticketing system Specialist resources Lecture theatre AV Sitemap Frequently asked questions Roles and responsibilities Overview People History Information for staff Overview Accounting Parking Cycling Departmental policies Information for hosts of visitors Meeting rooms Personnel information Reception Staff training Stores UROP internships Wiseman prize Health and safety Overview Emergency First aid General health and safety Environment Fitness H&S policies & committees Risk assessment Laser safety Useful links Index of Health & Safety pages Committee PhD resources Overview Induction PhD supervisors Graduate Advisers CPGS First Year Report: PhD Proposal Second Year Report: Dissertation Schedule Third Year Report: Progress Statement Fourth Year Report: the last year Papers and conferences Writing up Thesis formatting Submitting your dissertation Exemption from University Composition Fees Leave to work away, holidays and intermission Researcher Development Application deadlines List of PhD thesis Graduate Students' Forum PAT, recycling and Building Services Typographic resources Overview Thesis formatting Preparing Tripos exam questions in LaTeX Teaching resources Overview Information for CST examiners Information for Directors of Studies ACS module definition Providing advice to incoming ACS students ACS interviewing and admissions Outreach material Committees Overview Faculty Board Degree Committee Graduate Education Tripos Management Outreach Health & Safety IT Strategy Equality and Diversity Research Staff Staff–Student Directors of Studies Workload Wellbeing Graduate Students Ethics Buildings and Environment Selection External Discontinued committees William Gates Building Overview Building Services Access and security Care of the WGB Facilities in offices Energy & Environment Meeting rooms Stores West Cambridge Site Leaving the department Course pages 2020–21 Object-Oriented Programming Syllabus Course materials Recordings Information for supervisors Principal lecturer: Dr Andrew Rice Taken by: Part IA CST Hours: 12 Suggested hours of supervisions: 3 This course is a prerequisite for: Concurrent and Distributed Systems, Further Java, Multicore Semantics and Programming Past exam questions Aims The goal of this course is to provide students with an understanding of Object-Oriented Programming. Concepts are demonstrated in multiple languages, but the primary language is Java. Lecture syllabus Types, Objects and Classes Moving from functional to imperative. Functions, methods. Control flow. values, variables and types. Primitive Types. Classes as custom types. Objects vs Classes. Class definition, constructors. Static data and methods. Designing Classes Identifying classes. UML class diagrams. Modularity. Encapsulation/data hiding. Immutability. Access modifiers. Parameterised types (Generics). Pointers, References and Memory Pointers and references. Reference types in Java. The call stack. The heap. Iteration and recursion. Pass-by-value and pass-by-reference. Inheritance Inheritance. Casting. Shadowing. Overloading. Overriding. Abstract Methods and Classes. Polymorphism and Multiple Inheritance Polymorphism in ML and Java. Multiple inheritance. Interfaces in Java. Lifecycle of an Object Constructors and chaining. Destructors. Finalizers. Garbage Collection: reference counting, tracing. Java Collections and Object Comparison Java Collection interface. Key classes. Collections class. Iteration options and the use of Iterator. Comparing primitives and objects. Operator overloading. Error Handling Types of errors. Limitations of return values. Deferred error handling. Exceptions. Custom exceptions. Checked vs unchecked. Inappropriate use of exceptions. Assertions. DesignLanguage evolution Need for languages to evolve. Generics in Java. Type erasure. Introduction to Java 8: Lambda functions, functions as values, method references, streams. Design Patterns Introduction to design patterns. Open-closed principle. Examples of Singleton, Decorator, State, Composite, Strategy, Observer. [2 lectures] Objectives At the end of the course students should be familiar with the main features and limitations of the Java language; be able to write a Java program to solve a well specified problem; understand the principles of OOP; be able to demonstrate good object-oriented programming skills in Java; be able to describe, recognise, apply and implement selected design patterns in Java; be familiar with common errors in Java and its associated libraries; understand a Java program written by someone else; be able to debug and test Java programs; be familiar with major parts of Java 8 SE libraries; understand how to read Javadoc library documentation and reuse library code. Recommended reading No single text book covers all of the topics in this course. For those new to OOP, the best introductions are usually found in the introductory programming texts for OOP languages (such as Java, Python or C++). Look for those that are for people new to programming rather than those that are designed for programmers transitioning between languages (the Deitel book is highlighted for this reason). The web is also a very useful resource -- look for Java tutorials. * Deitel, H.M. and Deitel, P.J. (2009). Java: How to Program. Prentice Hall (8th ed.). Flanagan, D. (2005). Java in a nutshell : a desktop quick reference. O’Reilly (5th ed.). Flanagan, D. (2004). Java examples in a nutshell : a tutorial companion to Java in a nutshell. O’Reilly (3rd ed.). Gamma, E., Helm, R., Johnson, R. and Vlissides, A. (1995). Design patterns: elements of reusable object-oriented software. Addison-Wesley. Bloch, J. and Gafter, N. (2005). Java puzzlers. Addison-Wesley. © 2021 Department of Computer Science and Technology, University of Cambridge Information provided by Dr Andrew Rice – edit page University A-Z Contact the University Accessibility Freedom of information Terms and conditions Study at Cambridge Undergraduate Graduate International students Continuing education Executive and professional education Courses in education About the University How the University and Colleges work Visiting the University Map News Events Jobs Give to Cambridge Research at Cambridge News Features Discussion Spotlight on... About research at Cambridge