Wstęp do programowania zorientowanego obiektowo z wykorzystaniem języków Java i Python.
Repozytorium porządkuje komplet materiałów do nauki OOP w dwóch ekosystemach:
- Java - ścieżka bardziej formalna, klasowa i silniej oparta na typach,
- Python - ścieżka wieloparadygmatowa, bardziej elastyczna i oparta o konwencje, duck typing oraz praktykę projektową.
Celem jest równoległe pokazanie:
- wspólnych fundamentów OOP,
- różnic językowych i projektowych,
- praktyki laboratoryjnej dopasowanej do obu środowisk.
| Obszar | Folder | Liczba plików .md |
Opis |
|---|---|---|---|
| Wykłady Java | lectures-OOP-in-Java |
15 | Pełny kurs OOP w Javie |
| Laboratoria Java | labs-OOP-in-Java |
15 | Ćwiczenia praktyczne do kursu Java |
| Wykłady Python | lectures-OOP-in-Python |
15 | Pełny kurs OOP w Pythonie |
| Laboratoria Python | labs-OOP-in-Python |
15 | Ćwiczenia praktyczne do kursu Python |
Po przerobieniu materiału student powinien:
- rozumieć model obiektowy w Javie i Pythonie,
- projektować klasy, interfejsy, protokoły i relacje między obiektami,
- stosować enkapsulację, dziedziczenie, polimorfizm i kompozycję,
- znać idiomy obu ekosystemów:
property,dataclass,Protocol,pytest,venvw Pythonie oraz klasyczną strukturę OOP, biblioteki standardowe, wyjątki i testowanie w Javie, - rozumieć podstawy SOLID i ich praktyczne zastosowanie w obu językach.
| Nr | Temat | Plik |
|---|---|---|
| 1 | Środowisko języka Java | 01-srodowisko-javy.md |
| 2 | Paradygmaty obiektowości | 02-paradygmaty-obiektowosci.md |
| 3 | Klasy, obiekty i metoda main |
03-klasy-i-metody-main.md |
| 4 | Modułowość, pakiety i importy | 04-modulowosc-pakiety-i-importy.md |
| 5 | Modyfikatory dostępu i enkapsulacja | 05-modyfikatory-dostepu-i-enkapsulacja.md |
| 6 | Pola klas i stan obiektu | 06-pola-klas-i-stan-obiektu.md |
| 7 | Konstruktory i inicjalizacja obiektów | 07-konstruktory-i-inicjalizacja-obiektow.md |
| 8 | Dziedziczenie i polimorfizm | 08-dziedziczenie-i-polimorfizm.md |
| 9 | Interfejsy i klasy abstrakcyjne | 09-interfejsy-i-klasy-abstrakcyjne.md |
| 10 | Podstawowe klasy biblioteki Java | 10-podstawowe-klasy-biblioteki-java.md |
| 11 | Wyrażenia lambda i interfejsy funkcyjne | 11-wyrazenia-lambda-i-interfejsy-funkcyjne.md |
| 12 | Testowanie kodu | 12-testowanie-kodu.md |
| 13 | SOLID - zasady projektowania obiektowego | 13-solid-zasady-projektowania-obiektowego.md |
| 14 | Wyjątki i obsługa błędów | 14-wyjatki.md |
| 15 | Referencje do obiektów i niemutowalność | 15-referencje-do-obiektow.md |
| Nr | Temat | Plik |
|---|---|---|
| 1 | Środowisko języka Java | 01-srodowisko-jezyka-java.md |
| 2 | Paradygmaty obiektowości | 02-paradygmaty-obiektowosci.md |
| 3 | Klasy i metody | 03-klasy-i-metody.md |
| 4 | Modułowość, pakiety i importy | 04-modulowosc-pakiety-i-importy.md |
| 5 | Modyfikatory dostępu i enkapsulacja | 05-modyfikatory-dostepu-i-enkapsulacja.md |
| 6 | Pola klas i stan obiektu | 06-pola-klas-i-stan-obiektu.md |
| 7 | Konstruktory i inicjalizacja obiektów | 07-konstruktory-i-inicjalizacja-obiektow.md |
| 8 | Dziedziczenie i polimorfizm | 08-dziedziczenie-i-polimorfizm.md |
| 9 | Interfejsy i klasy abstrakcyjne | 09-interfejsy-i-klasy-abstrakcyjne.md |
| 10 | Podstawowe klasy biblioteki Java | 10-podstawowe-klasy-biblioteki-java.md |
| 11 | Wyrażenia lambda i interfejsy funkcyjne | 11-wyrazenia-lambda-i-interfejsy-funkcyjne.md |
| 12 | Testowanie kodu | 12-testowanie-kodu.md |
| 13 | SOLID - zasady projektowania obiektowego | 13-solid-zasady-projektowania-obiektowego.md |
| 14 | Wyjątki | 14-wyjatki.md |
| 15 | Referencje do obiektów | 15-referencje-do-obiektow.md |
| Nr | Temat | Plik |
|---|---|---|
| 1 | Środowisko języka Python | 01-srodowisko-pythona.md |
| 2 | Paradygmaty obiektowości w Pythonie | 02-paradygmaty-obiektowosci.md |
| 3 | Klasy, obiekty i punkt wejścia programu | 03-klasy-obiekty-i-entry-point.md |
| 4 | Modułowość, pakiety i importy | 04-modulowosc-pakiety-i-importy.md |
| 5 | Enkapsulacja, atrybuty i property |
05-enkapsulacja-atrybuty-i-properties.md |
| 6 | Atrybuty klasy i stan obiektu | 06-atrybuty-klasy-i-stan-obiektu.md |
| 7 | Inicjalizacja obiektów i dataclass |
07-inicjalizacja-obiektow-i-dataclasses.md |
| 8 | Dziedziczenie i polimorfizm | 08-dziedziczenie-i-polimorfizm.md |
| 9 | Protokoły, ABC i klasy abstrakcyjne | 09-protokoly-abc-i-klasy-abstrakcyjne.md |
| 10 | Podstawowe moduły standard library | 10-podstawowe-moduly-standard-library.md |
| 11 | Funkcje lambda i callables | 11-funkcje-lambda-i-callables.md |
| 12 | Testowanie kodu | 12-testowanie-kodu.md |
| 13 | SOLID w Pythonie | 13-solid-w-pythonie.md |
| 14 | Wyjątki w Pythonie | 14-wyjatki.md |
| 15 | Referencje, mutowalność i niemutowalność | 15-referencje-mutowalnosc-i-niemutowalnosc.md |
| Nr | Temat | Plik |
|---|---|---|
| 1 | Środowisko języka Python | 01-srodowisko-pythona.md |
| 2 | Paradygmaty obiektowości | 02-paradygmaty-obiektowosci.md |
| 3 | Klasy, obiekty i punkt wejścia programu | 03-klasy-obiekty-i-entry-point.md |
| 4 | Modułowość, pakiety i importy | 04-modulowosc-pakiety-i-importy.md |
| 5 | Enkapsulacja, atrybuty i property |
05-enkapsulacja-atrybuty-i-properties.md |
| 6 | Atrybuty klasy i stan obiektu | 06-atrybuty-klasy-i-stan-obiektu.md |
| 7 | Inicjalizacja obiektów i dataclass |
07-inicjalizacja-obiektow-i-dataclasses.md |
| 8 | Dziedziczenie i polimorfizm | 08-dziedziczenie-i-polimorfizm.md |
| 9 | Protokoły, ABC i klasy abstrakcyjne | 09-protokoly-abc-i-klasy-abstrakcyjne.md |
| 10 | Podstawowe moduły standard library | 10-podstawowe-moduly-standard-library.md |
| 11 | Funkcje lambda i callables | 11-funkcje-lambda-i-callables.md |
| 12 | Testowanie kodu | 12-testowanie-kodu.md |
| 13 | SOLID w Pythonie | 13-solid-w-pythonie.md |
| 14 | Wyjątki | 14-wyjatki.md |
| 15 | Referencje, mutowalność i niemutowalność | 15-referencje-mutowalnosc-i-niemutowalnosc.md |
- Najpierw przejście wykład + laboratorium w jednym języku od modułu 1 do 15.
- Następnie porównanie analogicznych tematów Java vs Python, szczególnie dla modułów 4-15.
- Szczególną uwagę warto zwrócić na różnice:
- Java: interfejsy, klasy abstrakcyjne, silniejsze formalne typowanie,
- Python:
property,dataclass,Protocol, duck typing,pytest, mutowalność i model importów.
- Repozytorium zawiera obecnie 60 plików Markdown materiałów dydaktycznych: 15 wykładów i 15 laboratoriów dla Javy oraz 15 wykładów i 15 laboratoriów dla Pythona.
- Ścieżki Java i Python mają celowo podobną numerację, aby można było łatwo porównywać te same tematy między językami.
- Dodatkowe PDF-y i materiały pomocnicze w folderach językowych zostały pozostawione jako uzupełnienie, ale głównym torem nauki są pliki Markdown wskazane powyżej.