This course offers a rigorous and in-depth look at object-oriented programming using the popular JAVA language. It is not intended for first time programmers. The primary aim for the course is the development of sound object-oriented programming skills which would lead to successful software development for problem solving in real world domains. After some preliminaries devoted to basic syntax and program structure key principles of object oriented programming including abstraction, encapsulation, inheritance and polymorphism are studied in detail with regular practical hands-on software development activities. Students also learn how to design, develop, test, and debug programs using a modern integrated development environment.
In terms of the JAVA language itself the course covers most of the important packages and the useful classes therein. The Java collection classes are studied in some detail along with the complex set of I/O classes. Additional topics include exception handling, building GUIs with Swing/JavaFX, event-driven programming and multi-threading. Throughout the course a series of progressive projects help students gain hands-on experience in developing a range of software applications with varying complexity.
An exemption exam is given to MISM and MSIT students with a strong recent programming background during the orientation period. For further information about theexpected background see the “Object-Oriented Programming Requirement” explained in http://www.heinz.cmu.edu/admissions/application-process/programming-requirement/index.aspx.
1. Use a Java IDE as well command line to test code snippets and author professional programs.
2. Learn Java language basics, including types, operators and program control.
3. Develop problem solving skills through practice and understanding of the divide-and-conquer and top-down approaches.
4. Form and manipulate collections of data (such as lists, dictionaries, tuples).
5. Learn the principles of object oriented programming in Java with usage of classes, inheritance, polymorphism, interfaces, containers and design patterns - with the goal of understanding code reuse and building scalable programs.
6. Be exposed to the SDLC (software development lifecycle) to understand how software applications are authored in industry. This includes basic UML usage and design concepts.