ΕΠΛ133: Αντικειμενοστρεφής Προγραμματισμός

Πρόγραμμα Μαθημάτων

Πρόγραμμα Μαθημάτων και Μαθησιακοί Στόχοι »

Module 1: Course Overview and Introductory Concepts.
Precept: 14/1 EPL133 Contents and Requirements
Learning Objectives:
  • Become familiar with the EPL133 contract.
  • Join and become familiar with the EPL133 Forum on Piazza and learn how to use it to ask questions, contribute with answers and communicate with the lecturer and teaching assistants.
Readings:
Lecture 1: 14/1 Introduction to Computational Thinking. Notes
Learning Objectives:
  • Understand how to study and succeed in EPL133.
  • Understand computational thinking and be able to model and solve problems computationally.
  • Understand the concepts of problem formulation, problem solving, and state representation in solving computational problems.
  • Understand the concept of well-defined problems and apply it to translate abstract problem descriptions to computational problems.
Readings:
  • Review EPL131 material.
Lecture 2: 17/1 The Java Platform. Notes
Learning Objectives: Understand and be able to explain and use:
  • Key programming terminology: compilation, interpretation, debugging, virtual machine, source code, object code, assembly language, intermediate languages.
  • The Java platform.
  • Interpretation vs. Compilation of computer programs.
  • Τhe Java Virtual Machine (JVM) and Bytecodes.
  • The concept of Multi-threading.
  • The lifecycle of a Java program.
  • Basic concepts of object-oriented programming.
  • The history of Object-oriented Programming.
  • The main aspects of the Java programming language.
Readings:
Lab 1: 17/1 Review basic Java programming environments and tools. Notes
Learning Objectives:
  • Review the process of compiling and executing Java programs using the command line.
  • Organise your directory structure for EPL133.
  • Review the use of Eclipse.
Readings:
  • Review EPL131 material.
  • Chapters 1-3. "Absolute Java", Walter Savitch.
  • Java Tutorials by Oracle.
Precept 2: 21/1 Lifecycle of a Java program.
Learning Objectives:
  • Refresh your knowledge of Java programming and recursion, and explore the concepts of class design, object state and performance through the example of a Fibonacci implementation in Java.
  • Understand the concepts of compilation, interpretation, the role of JVM, and bytecodes.
Lecture 3: 21/1 Introduction to Object-Oriented Programming Abstractions. Notes
Learning Objectives: Understand, identify and be able to employ key concepts of abstraction, such as hierarchy and data abstraction. Understand how abstraction is used to manage complexity. Understand the concepts of objects and classes. Understand the notions of object properties (fields), object behaviors (methods), object id (handle).
Readings: Chapter 4.1 "Absolute Java", Walter Savitch.
Lab 2: 21/1 Review Java programming style and comments. Notes
Learning Objectives:
  • Understand and properly apply Java coding standards and Javadoc style comments.
  • Understand how to access and use online Java documentation.
Readings:
  • Review EPL131 material.
  • Chapters 1-3. "Absolute Java", Walter Savitch.
  • Java Tutorials by Oracle.
Module 2: Class Design and Memory Allocation (Σχεδιασμός Κλάσεων. Διαχείριση Μνήμης).
Lecture 4: 24/1 Class Design in Java. Notes Learning Objectives: Understand, identify and be able to:
  • Design Java classes, create Java objects, invoke methods and make proper use of method parameters, arguments, and object handles.
  • Explain the concept of call-by-value vs. call-by-reference argument passing.
  • Use the parameter "this".
Readings:
  • Chapter 4.1 "Absolute Java", Walter Savitch.
Lab 3: 24/1 Hands-on Examples of using Abstraction in Problem Solving. Notes
Learning Objectives: Explore the use of abstraction in problem solving.
Precept 3: 28/1 Class design examples
Learning Objectives: Review the design of Java classes using information hiding and encapsulation.
Lecture 5: 28/1 Object-oriented Abstractions in Java: Information Hiding and Encapsulation. Notes Learning Objectives:
  • Understand the concepts of information hiding and encapsulation in Java.
  • Private and public class members.
  • Accessor and Mutator Methods.
  • Understand Java object construction and initialization.
  • Method and constructor overloading.
Readings:
  • Chapter 4.2, 4.3, 4.4. "Absolute Java", Walter Savitch.
  • Review of recursion. Chapter 11. "Absolute Java", Walter Savitch.
Lab 4: 28/1 Class design in Java. Notes
Learning Objectives: Explore examples of class definition in Java.
  • Design a class representing a circle.
  • Design a class representing a triangle.
  • The green mice. Create "mice" in different ways and make them "evolve" over time.
Lecture 6: 31/1 Memory Management. Notes Learning Objectives: Understand, explain and use the concepts of:
  • Java object construction and initialization.
  • Method and constructor overloading.
  • Memory Management.
  • Memory allocation.
  • The organization of virtual memory, the concepts of stack, heap and static memory.
Readings:
Lecture 7: 31/1 Memory Management in Java. Notes Learning Objectives: Be able to understand, explain and use the concepts of:
  • Memory management in Java.
  • Activation records (stack frames) and their role in maintaining method invocation semantics.
  • Heap-space allocation for storing Java objects.
  • Static memory, static variables (class variables) and static methods (class methods).
  • Review of memory management in the presence of method calls: stack, stack-frames (activation records), heap.
Readings: Chapter 5. "Absolute Java", Walter Savitch.
Lab 5: 31/1 Exploring Memory Management in Java. Notes
Learning objectives: Explore the memory allocation and garbage collection mechanisms of Java programs.
  • Using th VisualVM tool.
  • String Pool in Java
  • Calculating the size of objects in memory
  • Understanding static and dynamic string concatenation in Java.
  • Garbage collector in use
  • Static Initialization Block
Precept 4: 4/2 Memory Management review. Garbage collection. Notes Learning Objectives:
  • Review examples of static variables and methods and be able to explain and implement the concept.
  • Review what happens during object construction and initialization.
  • Understand the concept of garbage collection. Garbage collection in Java and related methods. Algorithms for garbage collection.
Readings:
  • Chapters 5. "Absolute Java", Walter Savitch.
  • Review recursion and stacks for recursion. Chapter 11. "Absolute Java", Walter Savitch.
Lecture 8: 4/2 Invariants. Notes Learning Objectives:
  • Understand and be able to use wrapper classes instead of primitive types.
  • Revisit the call-by-value approach for passing arguments to method calls in the case of class parameters.
  • Understand the concept of invariants, class invariants and their implications for class design.
  • Apply class invariants in constructors and methods. Expand on encapsulation and information hiding through copy constructors.
  • Understand the concepts of privacy leakage, mutable and immutable classes, and how to address privace leakage.
Readings: Chapter 5. "Absolute Java", Walter Savitch.
Lab 6: 4/2 Garbage collector in Java. Notes
Learning Objectives Learning Objectives: Explore the memory allocation and garbage collection mechanisms of Java programs.
  • Understanding static and dynamic string concatenation in Java.
  • Garbage collector in use.
  • Static Initialization Block.
Lab 7: 7/2 JUnit Tests. Notes
Learning Objectives: Explore the JUnit testing platform.
  • Creating JUnit tests in Eclipse
  • Writing tests
  • Running your tests cases
Precept 5: 11/2 Invariants in Practice Notes
Learning Objectives:
  • Be able to analyze invariants and implement them in constructors.
  • Understand the concept of privacy leaks.
  • Understand the use and apply the concept of copy constructors.
  • Be able to address privacy leaks and provide encapsulation through copy constructors.
Lecture 9: 11/2 Code reuse in Java. Notes Learning Objectives:
  • Understand how to create and re-use Java libraries (packages).
  • Understanding the role of CLASSPATH and how to set it up.
  • Overview of naming conventions for packages, classes, variables.
Readings: Chapter 5.4 Absolute Java Walter Savitch.
Quiz 1: 11/2 Quiz 1.
Module 4: Inheritance (Κληρονομικότητα).
Lecture 10: 14/2 Inheritance. Notes Learning objectives:
  • Understand and apply the concepts of class re-use through composition and inheritance.
  • Understand the concept inheritance as an abstraction and programming technique.
  • Develop an understanding of the relation between inheritance and class hierarchy.
Readings: Chapter 7. Absolute Java Walter Savitch.
Lab 9: 14/2 UML class diagrams. Notes
Learning Objectives: Explore the JUnit testing platform.
  • How to use draw.io.
  • Design UML class diagrams with draw.io
Precept 6: 18/2 Examples of inheritance.
Learning outcome: Review of examples with inheritance.
Readings: Chapter 7. Absolute Java Walter Savitch.
Lecture 11: 18/2 Inheritance continued. Notes
Learning Objectives:
  • Understand and apply inheritance mechanisms.
  • Understand, explain and apply method overriding.
  • Understand and explain how object construction works in the case of inherited classes.
  • Be familiar with Final classes and final class members.
  • Understand and explain the differences of access specifiers: private, protected, public.
Readings: Chapter 7. Absolute Java Walter Savitch.
Lab 10: 18/2 Inheritance in Java. Notes
Learning Objectives: Introducing inheritance in Java.
  • How super(), this() works.
  • The equals() method and inheritance.
Lecture 12: 21/2 Upcasting. Notes
Learning objectives: Understand, recognize and apply of upcasting and its implications. Review of examples with inheritance and upcasting. The "Object" class.
Readings: Chapter 7. Absolute Java Walter Savitch.
Lab 11: 21/2 Inheritance in Java - continued. Notes
Learning outcome: Solve different problems using inheritance in Java.
Module 5: Polymorphism, Αbstract Classes and Interfaces (Πολυμορφισμός, Αφαιρετικές Κλάσεις και Διαπροσωπείες).
Precept 7: 25/2 Review of inheritance and upcasting.
Learning outcome: Review of examples with inheritance. Understand the concept of Software patterns. Recognize and apply Code re-use through composition and delegation as an alternative to inheritance.
Readings: Chapter 7. Absolute Java Walter Savitch.
Lecture 13: 25/2 Introduction to Polymorphism. Notes Learning objectives: Understand and recognize the concept of Polymorphism. Introduction to the concept of binding.
Readings: Chapter 8. Absolute Java Walter Savitch.
Lab 12: 25/2 Polymorphism. Notes
Learning Objectives:
  • Polymorphic behavior via method overriding.
Lecture 14: 28/2 Polymorphism - continued. Notes Learning Objectives:
  • Understand and apply how Polymorphism works with Static methods: Overriding vs. Hiding.
  • Polymorphism and Constructors.
  • Explore and understand the pitfalls of upcasting vs. downcasting.
  • Understand and use the clone method.
Readings: Chapter 8. Absolute Java, Walter Savitch.
Lab 13: 28/2 Exercises on Polymorphism in Java. Notes
Learning Objectives:
  • Polymorphic behavior via abstract classes.
  • Polymorphic copy.
  • Liskov Substitution Principle.
Precept 8: 3/3 Downcasting
Learning outcome: Explore examples of polymorphism, upcasting, and downcasting. The clone method and its use.
Readings: Chapter 8.1, Absolute Java, Walter Savitch.
Lecture 15: 3/3 Abstract Classes and Interfaces Introduction Notes Learning Objectives:
  • Understand and apply abstract classes.
  • Understand and apply the concept of Interface.
  • See how interfaces are used in practice.
  • >
Readings:
  • Chapter 8.2 Absolute Java Walter Savitch.
  • Chapter 13.1. Absolute Java Walter Savitch.
Lab 14: 3/3 Exercises on Polymorphism in Java. Notes
Learning outcome:
  • Polymorphic behavior via abstract classes.
Lecture 16: 6/3 Interface inheritance. Using Interfaces. Notes Learning Objectives:
  • See how interfaces are used in practice.
  • Understand and apply the concept of Interfaces to develop general sorting code.
  • Understand and apply the definition of constants inside Interfaces.
Readings:
  • Chapter 8.2 Absolute Java Savitch & Mock.
  • Chapter 13.1. Absolute Java Savitch & Mock.
Lab 15: 6/3 Exercises on Interfaces. Notes
Learning outcome: Using interfaces in Java.
  • Interfaces and inheritance.
  • Modelising geometric shapes using interfaces.
  • Example using Comparable interface.
Precept 9: 10/3 Μultiple Inheritance and Default Methods. Notes
Learning objectives:
  • Understand and apply multiple inheritance through Interfaces.
  • Understand uses of Serializable and Clonable interface.
  • Understand the impact of conflicts in interface inheritance.
  • Default methods.
Readings: Chapter 13.1, Absolute Java Walter Savitch.
Lab 16: 10/3 Exercises Interfaces - continued. Notes
Learning outcome: Using interfaces in Java.
  • More exercises on interfaces in Java.
  • Modelising shapes using interfaces - continued
Module 6: Unified Modeling Language and Software Patterns (UML και Μοτίβα Λογισμικού).
Lecture 17: 10/3 Unified Modeling Language. Notes Learning objectives:
  • Understand and apply basic UML concepts.
  • Understand and apply class diagrams and the different types of relationships that exist between classes and how these are represented in UML.
  • Introduction to the concept of Design Patterns.
  • Understand and apply various design patterns.
Readings:
Lecture 18-dl: 13/3 Design Patterns. Notes Learning objectives:
  • Introduction to the concept of Design Patterns.
  • Understand and apply various design patterns: Adapter, Strategy, Model-View-Controller.
Readings:
  • Chapter 12. Absolute Java Walter Savitch.
Module 7: Exception Handling and File I/O (Διαχείριση Εξαιρέσεων και Είσοδος/'Εξοδος σε Αρχεία).
Lecture 19-dl: 17/3 Exception Handling. Notes Learning outcome: Understand the concept of exceptions and faults. Introduction to exception handling in Java.
Readings: Chapter 9. Absolute Java Walter Savitch.
Precept 10-dl: 17/3 Programming Exceptions Notes
Learning outcome:
  • Understand and apply Programming Techniques for Exception Handling.
  • Understand the concept of Event-driven Programming.
Readings: Chapter 9.2, 9.3 Absolute Java Walter Savitch.
Lab 18-dl: 17/3 Exceptions in Java. Notes
Learning outcome: Using exceptions, make your own exception classes.
Lecture 20-dl: 20/3 File I/O. Notes Learning outcome:
  • Understand and apply basic concepts of file systems and I/O.
  • Become familiar with and be able to apply File I/O Techniques in Java.
  • Understand and apply the concepts of streams, text and binary files and I/O.
Readings: Chapter 10.1, 10.2 Absolute Java Walter Savitch.
Lab 19-dl: 20/3 Exercises on File I/O. Notes
Learning outcome: Using streams in Java. Byte Streams, Character Streams.
Lecture 21-dl and Precept 11: 24/3 Java I/O Libraries. Notes Learning outcome: Understand, Explain and Apply:
  • Text and Binary Files to store and process data.
  • Basic Input-Output Classes of Java: Scanner, Bufferred Reader.
Readings: Chapter 10.2, 10.3, 10.4, 10.5 Absolute Java Walter Savitch.
Lab 20-dl: 24/3 Exercises on File I/O. Notes
Learning outcome: Using streams in Java. Byte Streams, Character Streams.
Lecture 22-dl: 27/3 File I/O. Notes Learning outcome: Understand, Explain and Apply:
  • The File Class.
  • Binary Files.
  • Random-Access Files.
Readings: Chapter 10.2, 10.3, 10.4, 10.5 Absolute Java Walter Savitch.
Lab 21-dl: 27/3 Exercises on Binary files. Notes
Learning outcome: Using streams in Java. Byte Streams, Character Streams.
Module 8: Inner Classes, Generics and Collections (Εσωτερικές Κλάσεις, Γενόσημοι Τύποι, Κιβώτια και Συλλογές).
Lecture 23-dl: 31/3 Elements of Inner Classes. Notes Video Learning Objectives:
  • Understand and explain the concept and syntax of inner classes.
  • Understand, explain, and apply inner class uses.
  • Understand, explain, and apply static inner classes and their use.
  • Review simple examples of inner-class use.
  • Understand, explain and apply the concept of local inner classes.
Readings: Chapter 13.2, 13.3 Absolute Java Walter Savitch.
Lab 22-dl: 31/3 Exercises on Inner classes. Notes
Learning outcome:
  • Using inner classes in Java.
  • Using local inner classes in Java.
  • Using anonymous classes in Java.
Lecture 24-dl: 3/4 Anonymous Inner Classes. Notes Video Learning outcome:
  • Understand the interplay between inheritance and inner classes.
  • Understand, explain and apply the concept of local inner classes.
  • Understand, explain and apply the concept of anonymous inner classes.
Readings: Chapter 13.3 Absolute Java Walter Savitch, and class-notes.
Lab 23-dl: 3/4 SOLID design principles. Notes
Learning outcome:
  • The Liskov Substitution Principle.
  • The Interface Segregation Principle.
Lecture 25-dl & Precept: 7/4 Closures, Callbacks and Application Frameworks. Notes Video Learning Objectives:
  • Understand and apply inner classes in the Factory Method software pattern.
  • Understand the concept of closure and callbacks.
  • Understand, explain and use inner classes to implement callbacks in Java.
  • Understand, explain and apply inner classes to develop application frameworks with event-driven programming.
  • Understand, explain and apply the concept of Containers and the ArrayList package.
Readings: Chapter 13.3 Absolute Java Walter Savitch, and class-notes.
Lab 24-dl: 6/4 Git. Notes
Learning outcome: How to use git and github.
  • Creating git repos in github.
  • Adding collaborators.
  • Using git commands.
Lecture 26-dl: 10/4 Generics. Notes Video Learning Objectives:
  • Review, understand and apply the capabilities of the ArrayList class.
  • Understand and explain the concept of class parameters, generic classes, their use and implementation.
  • Understand and explain the terminology and the concepts of generics and their advantages.
Readings: Chapter 14 Absolute Java Walter Savitch, and class-notes.
Lab 25-dl: 10/4 Exercises on Generics. Notes
Learning outcome: Implement generic classes in Java.
Lecture 27-dl & Precept: 14/4 Generics. Notes Video Learning Objectives:
  • Work on simple examples using Generics.
  • Explore, understand, and explain various pitfalls regarding Generics.
  • Understand and explain the relation between Generics and Inheritance.
  • Understand and explain the implementation of Generics through type erasure.
  • Understand, explain and apply the concept of Generic Methods.
Readings: Chapter 14 Absolute Java Walter Savitch, and class-notes.
Quiz 2: 14/4 Quiz 2.
Lab 26-dl: 24/4 Exercises on Generics -continued. Notes
Learning outcome: Implement generic classes in Java.
Mock distance exam 1: 28/4 Use of blackboard for remote synchronous examination.
Lecture 28-dl: 28/4 Collections. Notes Video Learning Objectives:
  • Understand the concept of linked lists and apply it by implementing linked lists in Java.
  • Become familiar with the principles of Collection classes.
Readings: Chapter 15.1, 15.3, 16 Absolute Java Walter Savitch, and class-notes.
Lab 27-dl: 28/4 Linked Data structures. Notes
Learning outcome: Exposure to Linked lists and link-list programming.
Mock distance exam 2: 5/5 Use of Blackboard and Safe Exam Browser for remote synchronous examination and Zoom for remote proctoring.
Lecture 29-dl: 5/5 Collections and Java8 Overview. Notes Video Learning Objectives:
  • Become familiar with the principles of Collection classes and be able to apply Collections and Maps for solving computational problems: Collections, Maps, Iterators.
  • Understand the concept of Iterators and apply it in Java programs.
  • Review the new concepts in Java 8.
Readings: Chapter 16 Absolute Java Walter Savitch, and class-notes.
Lab 28-dl: 5/5 Exercises on Collections. Notes
Learning outcome: Using collections in Java.
  • Using HashMaps.
  • Using HashSets.