CENG/BILM 217 Object Oriented Design



Fatih University, Computer Engineering Department
Fall Semester 2005
CENG 217: Monday 15:00 - 17:00 (E210), Tuesday 15:00 - 16:00 E-210
BILM 217: Monday 13:00 - 14:00 (E303), Tuesday 12:00 - 14:00 E-303

Instructor: Halûk Gümüşkaya Teaching Assistant: Melek Oktay
Office: EA301 Office:
Office hours: Mon 14-15, Tue 14-15, Thur 15-16 Office hours:
Office phone: 0.212.889 0810-1036 Office phone: 1027
e-mail: haluk@fatih.edu.tr e-mail: moktay@fatih.edu.tr
Mostly Static Information: Mostly Dynamic Information:
bulletCourse Description
bullet Lecture Announcements
bullet Prerequists

Course Materials

bullet Lecture Schedule

References and Readings

bulletTools and Development Environments

Projects Page 

bullet Textbooks
bulletGrades: CENG 217   BILM 217   Projects
bullet Grading
bullet Academic Integrity

Course Description

Catalog Description: Classes, objects, inheritance, polymorphism, graphical user interfaces, event handling, exception handling, files and streams, multithreading. UML diagrams: Class, object, use-case, sequence and activity diagrams. Introduction to GoF design patterns. Software design using UML and design patterns.

Short: The realization of these concepts is examined using design patterns, UML and Java. Students are expected to complete and report programming assignments and a nontrivial project developed in Java.

Long: CENG/BILM 217 teaches mainly large-scale Object Oriented Programming (OOP) using Java.

"Object-Oriented Programming is a method of implementation in which programs are organized as cooperative collections of objects, each of which represents an instance of some class, and whose classes are all members of a hierarchy of classes united via inheritance relationships."  (Grady Booch)

The course concentrates on OOP design, both in the internal structure of its projects and in the large pre-built OOP libraries they are built on. The course features individual homework projects exercising OOP techniques and culminating in a large final team project. The course has several related themes...


Java and OOP programming. We cover advanced parts of the Java language, and explore OOP design principles. Within OOP, we emphasize modular design for large projects, unit testing, and inheritance.


Concepts and skills for OOP/GUI libraries. OOP libraries for Graphical User Interfaces (GUIs) are probably the best application of OOP yet devised, so it's natural for CENG/BILM 217 to use OOP/GUI libraries to make its points. The course explores the design of OOP/GUI systems and how to use them.


Programming in an OOP library environment. The real work in an OOP system is orchestrating the behavior of the off-the-shelf library objects. In that context, the most interesting skill is operating within any large body of off the shelf OOP code. Using such libraries requires different skills from the classic from-scratch-design-code-debug cycle. CENG/BILM 217 exercises the research and coding skills necessary to work effectively within large OOP systems. 


Introduction to Object-Oriented Analysis and Design. We introduce the basics of OO analysis and design using UML and design patterns in this course. Analysis, design and team development topics are covered in detail in CENG 302 Software Engineering


Introduction to UML and Design Patterns. This course makes an introduction to UML and design patterns. The UML is a graphical language for visualizing, specifying, constructing, and documenting the artifacts of a software-intensive system. We will also learn and use some of the well established design practices that recur in many non-trivial software systems. These techniques are referred to as design patterns. This course teaches the situations and motivations that call for using a wide range of design patterns.


Team programming on a large project with a significant deadline. CENG/BILM 217 gives exposure to some “real world” programming issues on the final project. The final project will take up about the last 8 weeks of the semester. The goal of the final project will be to use the OOP/GUI system to produce a complete GUI program. The final project will exercise skills in OOP design and testing, team programming, project scheduling, interface design, and completing a large project under a serious deadline.

At the end of the course, you will understand how to construct a significant, fully functional GUI application from scratch as well as having gained general experience with advanced Java programming, OOP design, some UML and design patterns, unit testing, and the use of large OOP libraries.

Many course materials and related links will be available online at our course web page. If you are looking for anything course related, look on the course web page first. In particular, the Course Materials/Lecture Announcements and References and Readings pages should be frequently visited during the semester.


CENG 102 Computer Programming II (Introduction to Java and fundamentals of object oriented programming).

Lecture Schedule


Topics Covered



Course Overview, Java Refresher: Java basics,  Exception Handling, Files and Streams



Object Oriented Design Process: Identifying classes and methods, relationships between classes, CRC cards, Introduction to UML and basic diagrams (class, sequence and state diagrams), case study


Guidelines for Class Design: Designing and implementing the interface of a class, programming by contract



Interface types and Polymorphism: User interface types, anonymous classes, polymorphism


Patterns and GUI Programming: Introduction to design patterns, iterator, observer, strategy, composite, and decorator patterns



Inheritance and Abstract Classes: Defining and implementing subclasses, abstract classes, inheritance hierarchies of classes



Java Object Model: Java type system, primitive types, wrappers, and array types, type inquiry and reflection, Object equility and cloning, Serialization, Components and JavaBeans


Frameworks: Framework concept, applets, collections, application, and graph editor frameworks



Multithreading: Threads and Runnable interface type, Thread synchronization



More Design Patterns: Adapter, command, factory method, proxy, singleton, visitor, and other design patterns



Case Studies: Object-oriented analysis, design and implementation of complex programming examples



Work on Projects and Demonstrations




Object Oriented Design and Patterns (OODP), 2nd Edition, Cay Horstmann, John Wiley, ISBN: 0-471-74487-5, 2005.


Java How to Program (JHTP), H. M. Deitel, P. J. Deitel, Prentice Hall, 6th Edition, 2005. (Last year's text book).



Objects First with Java, A Practical Introduction Using BlueJ, 2nd Edition, D. J. Barnes, M. Kölling, Prentice Hall, 2005.


Object-Oriented Software Development Using Java, Principles, Patterns, and Frameworks, 2nd Edition, X. Jia, Addison Wesley, 2003.


Java Software Solutions, 4th Edition, Lewis & Loftus, Addison-Wesley, 2005.


Thinking in Java, Bruce Eckel. Lots of Java coverage in one free online book.


Core Java Vol 1(basic) & Vol 2 (advanced), by Horstmann. These volumes give a good, standard coverage of Java.


Sun's Official Java Tutorial


UML Distilled, 3rd edition, Martin Fowler, Addison-Wesley, 2004.


UML for Java Programmers, Robert C. Martin, Prentice Hall, 2003.


Applying UML and Patterns - An Introduction to Object-Oriented Analysis and Design and Iterative Development, C. Larman, Prentice Hall, 2004.

Tools and Development Environments


Together Architect for Eclipse 2006 (our main modeling and implementation tool, it includes Eclipse 3.1)


Eclipse (Eclipse Tutorials) (Java development platform)


JBuilder (JBuilder is maybe less important now since there are open source alternatives)


BlueJ (for teaching basic object oritented programming concepts)


Together Plug in for Eclipse (UML tool for visualization, modeling, construction and documentation of software artifacts)


Omondo Plug in for Eclipse (UML tool)

Grading (Tentative)

    5   % : Quizzes
    20 % : Homework Assignments   
    30 % :
Team Project  
    20 % : Midterm

    25 % : Final Exam (a comprehensive exam at the end of the course)

Attendance: Attendance is important in order to learn the topics in a timely manner. Attendance will be forced by taking attendance and and by making quizzes at random times.

Quizzes: There will short quizzes at random times. I may not inform you about the quizzes. A quiz may be done at any time during a lecture period. The quizzes will be open-book short exams.

Homework: There will be homework in every 2 weeks. The purpose of the homework is to give you a chance to exercise the knowledge gained from the recent class material.

Team Project: The team project is very important for a course of this kind. The project will be completed in the last 8 weeks of the semester. The project is a large, team project that brings together and exercises all of the material from the beginning of the course. The project is programmed in teams of 3-5 students.

Paperless Submission: We will use electronic submission methods for all the programming assignments, and all the grading feedback will be electronic as well.

Midterm Exams: There will be one midterm exam.

Final Exam: There will be one final exam that will be given during final exams period of the semester.

Makeup Exam: Depending on the need (for officially reported or extraordinary cases) I may make a makeup exam. But I should warn you that makeup exam will be much more difficult than the other exams in order to provide fairness for students who work on time and take the exam on time, and discourage students from unnecessarily omitting the exams.

Honor Code: You are free to discuss ideas and problem approaches with others, but all the work you hand in should be your own creation (or the creation of your team for a team project). In particular, sharing or copying code is not OK. There are tools we may use that do an extremely aggressive job of finding little sections plagiarism within the submissions. The plagiarism tools are shockingly good at finding issues, and of course doing your own work is the only way to really learn the material anyway. If a student is in a bad situation, they should come and talk things over with me.

If you feel a particular bit of collaboration may have crossed the line, just clearly cite what help you got and from whom in your project's Readme. You can never get in Honor Code trouble if the help is clearly credited.

If we are using the Foo module, and you find the key 8 lines in the docs or in a book or on the Internet that describe how to call the Foo module best, it's fine to use those lines without comment in your Readme. OOP programming is filled with episodes like that. If I have asked you to implement the Bar module, copying the 200 lines you found that implements Bar is not ok.

Academic Integrity

We will be very careful in grading the projects, homeworks, exams so that everybody gets the grade that he/she deserves. Copying will not be tolerated and will be checked and punished rigorously.

The Fatih University has a very strict policy on academic dishonesty. All work on homeworks and examinations must be strictly individual.  Violations of this policy will result in an F grade for the class and may result in suspension/expulsion from the university.

You must do all of the homework assignments for grading individually (and the exams, of course). In preparing the solutions for assignments, you may consult with other students, the teaching assistants and myself regarding the general method of solutions. However, the final submission handed in for grading must be your own work. Copying the solutions of others is expressly forbidden. Allowing others to copy your solutions is expressly forbidden. Penalties for violation of this will range from a grade of zero on the assignment, a reduced grade for the semester, to a grade of F for the course, and a letter to the Office of the Dean.