Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/marincervinschi/objectorientedprogramming

Intermediate course introducing Object-Oriented Programming (OOP) principles with the Java language. It covers the evolution of programming languages, the limitations of procedural programming, and the key features of OOP.
https://github.com/marincervinschi/objectorientedprogramming

arrays collections exceptions functions generics java javabasics javafx oop oop-principles strings threds

Last synced: 5 days ago
JSON representation

Intermediate course introducing Object-Oriented Programming (OOP) principles with the Java language. It covers the evolution of programming languages, the limitations of procedural programming, and the key features of OOP.

Awesome Lists containing this project

README

        



# ObjectOrientedProgramming
Intermediate course introducing Object-Oriented Programming (OOP) principles with the Java language.
It covers the evolution of programming languages, the limitations of procedural programming, and the key features of OOP. The course includes various modules that delve into the basics of Java, object-oriented design, data structures, generics, functional programming, exceptions, and multi-threading. Each module is accompanied by practical lab exercises to reinforce the concepts learned.
## Credits
* **Course:** Object-Oriented Programming (https://github.com/nbicocchi/learn-java-core)
* **Professor:** Prof. Nicola Bicocchi

### Software

* [JDK Development Kit 21](https://www.oracle.com/it/java/technologies/downloads/)
* [IntelliJ IDEA](https://www.jetbrains.com/idea/) [Plugins: [Mermaid](https://plugins.jetbrains.com/plugin/20146-mermaid)]
* [Scene Builder](https://gluonhq.com/products/scene-builder/)
* [Docker Desktop](https://www.docker.com/products/docker-desktop/)
* [Mermaid](https://mermaid.js.org/)

### Modules
[E1] From Functions to Classes

* Evolution of programming languages
* Limits of procedural programming
* Modularization, reuse of code, and object-oriented programming
* Object-oriented programming key features

[E2] Basics

> Lab:
> [exercises.warmup](exercises/src/main/java/warmup),
> [exercises.arrays](exercises/src/main/java/arrays),
> [exercises.strings](exercises/src/main/java/strings)

* Variables, methods and parameter passing
* Fundamental data types
* Decisions
* Loops
* Arrays (and brief introduction to ArrayList)
* Strings
* Input and output
* Random numbers

[E3] Object Oriented Design

> Lab: [exercises.oop](exercises/src/main/java/oop)

* Instance variables and encapsulation
* Specifying the public interface of a class (and its implementation)
* Static variables and methods
* Inheritance hierarchies
* Abstract classes
* Interfaces (and anonymous implementations)
* Object: the cosmic superclass
* Wrapper types
* UML class diagrams

[E4] Data Structures (Collections Framework)

> Lab: package [exercises.collections](exercises/src/main/java/collections)

* Iterable and Iterator interfaces
* List interface and its implementations (ArrayList, LinkedList)
* Set interface and its implementations (HashSet, LinkedHashSet, TreeSet)
* Deque interface and its implementations (ArrayDeque, LinkedList)
* Map interface and its implementations (HashMap, LinkedHashMap, TreeMap)
* Sorting and searching

[E5] Generic Data Structures (Generics)

> Lab: [exercises.generics](exercises/src/main/java/generics)

* Generic classes and type parameters
* Implementing generic types
* Generic methods
* Constraining type parameters
* Type erasure

[E6] Functional Programming

> Lab: [exercises.functional](exercises/src/main/java/functional)

* Lambda expressions
* Functional interfaces
* Producing, transforming, and collecting functional streams
* The *Optional* type

[E7] Exceptions

> Lab: [exercises.exceptions](exercises/src/main/java/exceptions)

* Throwing exceptions
* Catching exceptions
* Checked and unchecked exceptions
* Closing resources

[E8] Multi-threading

> Lab: [exercises.threads](exercises/src/main/java/threads)

* Thread states
* Thread interference
* Thread synchronisation (synchronised/wait/notify)
* ExecutorService
* Callable/Future/Task