Klasa 3 · rozdział 1
Powtórzenie i paradygmat obiektowy
Klasa 2 dała C++ od algorytmu do pierwszych klas. Tu ładujesz ten fundament i ustawiasz myślenie na cały rok: program to nie tylko ciąg funkcji — to obiekty, które mają dane i zachowanie. Pojęcia (klasa, obiekt, hermetyzacja) są też w słowniczku.
Po tym rozdziale powinieneś umieć
- odróżnić program strukturalny (funkcje) od obiektowego (klasy);
- przypomnieć pojęcia: klasa (wzór / szablon), obiekt (instancja), atrybut, metoda;
- napisać krótki program z funkcją oraz prostą klasą w Visual Studio 2026;
- porównać oba zapisy na tym samym zadaniu;
- wymienić cechy języka obiektowego i przykładowe języki;
- uzasadnić, kiedy warto wydzielić klasę, a kiedy wystarcza funkcja.
1. Powtórzenie: C++ strukturalny
W programie strukturalnym dzielisz zadanie na funkcje.
Dane (zmienne, tablice, struktury) żyją osobno; funkcje je przyjmują i zwracają wynik.
Wejście i wyjście trzymasz w main — obliczenie w funkcji bez cin / cout.
Tę umowę z klasy 2 zostawiasz na cały rok i na zadanie praktyczne.
#include <iostream>
using namespace std;
double poleProstokata(double a, double b) {
return a * b;
}
int main() {
double a, b;
cin >> a >> b;
cout << poleProstokata(a, b);
return 0;
}
Z klasy 2 musisz sprawnie wrócić do: typów (int, double, string),
if / pętli, funkcji (wartość, referencja, void), tablic i wektorów,
prostych plików tekstowych. Jeśli któraś konstrukcja zardzewiała — odtwórz ją w Visual Studio
zanim ruszysz w głąb klas.
.cpp na start, potem podział na klasy.
Ten podręcznik tylko czytasz w przeglądarce.
2. Powtórzenie: klasy i obiekty
Klasa Prostokat jest szablonem: mówi, że każdy obiekt będzie miał atrybuty
a i b oraz zachowania pole() i obwod().
Zapis Prostokat p(3, 4) tworzy instancję — ten obiekt ma już konkretne wartości
atrybutów (3 i 4). Drugi obiekt Prostokat q(5, 2) korzysta z tego samego wzoru,
ale ma własne wartości.
| Pojęcie | Znaczenie | W przykładzie |
|---|---|---|
| Klasa | Wzór, szablon, projekt do tworzenia obiektów | Prostokat |
| Obiekt | Instancja (egzemplarz) klasy — z własnymi wartościami atrybutów | Prostokat p(3, 4); |
| Atrybut (pole) | Zmienna zdefiniowana w klasie; w obiekcie ma konkretną wartość | a, b |
| Metoda | Zachowanie zdefiniowane w klasie | pole(), obwod() |
| Konstruktor | Metoda wołana przy tworzeniu instancji; ustawia atrybuty | Prostokat(double, double) |
class Prostokat {
double a, b;
public:
Prostokat(double aa, double bb) : a(aa), b(bb) {}
double pole() const { return a * b; }
double obwod() const { return 2 * (a + b); }
};
Atrybuty (pola) są private (domyślnie w class). Na zewnątrz wołasz metody,
nie podstawiasz wartości a i b z main. To zalążek
hermetyzacji — atrybuty i zasady ich zmiany
zostają przy obiekcie. Dziedziczenie i polimorfizm z końca klasy 2 wrócą jako osobny, pełny dział.
3. Ten sam problem, dwa zapisy
Zadanie: wczytaj boki prostokąta, wypisz pole i obwód. Poniżej ta sama matematyka — inny podział odpowiedzialności.
Strukturalnie
Dwie funkcje biorą boki jako argumenty. Nic nie pamięta „tego” prostokąta
między wywołaniami. Jeśli dołożysz przekątną, dopisujesz trzecią funkcję
i znowu przekazujesz a i b.
Obiektowo
Obiekt trzyma boki. Metody nie potrzebują argumentów boków —
liczą z pól. Drugi prostokąt to drugi obiekt, nie kolejna para zmiennych
a2, b2.
// we/wy zostaje w main — tak w obu wariantach
int main() {
double a, b;
cin >> a >> b;
Prostokat p(a, b);
cout << p.pole() << " " << p.obwod();
return 0;
}
Obiektowość nie zwalnia z czystego main. Nadal: odczyt, utworzenie obiektu,
wypisanie tego, co metody policzyły. Funkcja-liczydło bez we/wy staje się metodą bez we/wy.
main to nadal program strukturalny
w przebraniu. Jeśli wydzielasz klasę, stan i operacje na tym stanie idą do środka.
4. Paradygmat i języki obiektowe
Paradygmat to umowa, jak układasz program. Strukturalny: funkcje i dane. Obiektowy: obiekty, które łączą jedno i drugie i mogą tworzyć hierarchie.
Język obiektowy daje składnię na klasy, obiekty, zwykle hermetyzację i dziedziczenie. C++ jest wieloparadygmatowy: możesz pisać „jak w C” albo obiektowo. Na tym przedmiocie świadomie wybierasz drugi sposób, gdy zadanie ma stan i zachowania.
| Język | Uwaga na start |
|---|---|
| C++ | Kompilowany. Klasy, dziedziczenie, później szablony. Nasz język na sali. |
| C# | Klasy od pierwszej linijki. Typowy przy aplikacjach na Windows / .NET. |
| Java | Prawie wszystko jest klasą. Maszyna wirtualna, inny ekosystem niż C++. |
| Python | Interpretowany; klasy są, ale nie musisz ich używać w każdym skrypcie. |
Wspólny szkielet idei: klasa, obiekt, hermetyzacja, dziedziczenie.
Składnia i szczegóły (wskaźniki, destruktor, virtual) są już „po C++”.
Nie uczysz się tu Javy — wystarczy rozpoznać, że to ten sam paradygmat.
5. Kiedy klasa, kiedy funkcja
Nie każda linijka zasługuje na klasę. Funkcja zostaje, gdy liczysz coś z argumentów i nic nie musisz pamiętać do następnego wywołania: NWD, minimum z tablicy, zamiana stopni.
Klasę warto wydzielić, gdy:
- kilka danych należy do siebie (bok i bok; saldo i numer konta);
- te dane mają stały zestaw operacji (wpłata, wypłata; pole, obwód);
- będzie więcej niż jeden egzemplarz (lista produktów, kilku uczniów);
- potem pojawi się hierarchia (Pojazd → Samochod) — to już zapowiedź kolejnych działów.
.cpp.
6. Szkic aplikacji obiektowej
Przykład: wypożyczalnia podręczników. Nie implementujesz jej w tym rozdziale — ćwiczysz podział.
| Klasa | Odpowiedzialność | Przykładowe składowe |
|---|---|---|
Ksiazka |
Jeden egzemplarz | tytuł, dostępna, wypozycz(), zwroc() |
Czytelnik |
Osoba z limitem wypożyczeń | imię, ile ma książek, mozeWziac() |
Wypozyczalnia |
Zbiór książek i reguła wypożyczenia | lista książek, znajdz(), obsluz() |
main tylko wczytuje polecenie i woła metody.
NWD albo sortowanie listy inwentarzowej zostaje funkcją / metodą bez we/wy —
nie robi się z nich osobnej „klasy dla samego faktu”.
main ze zmiennymi tytul1, tytul2
i funkcjami wypozycz1(), wypozycz2(), to sygnał:
te powtórzenia powinny stać się obiektami jednej klasy.
Ćwiczenia do samodzielnego wykonania
Folder: np. Dokumenty\cwiczenia-po\klasa-3\rozdzial-01.
Programy kompilujesz w Visual Studio 2026. Nie trzymaj prac w folderze podręcznika.
Ćwiczenie 1. Języki i paradygmat łatwe
W notatce: (1) jednym zdaniem różnica programu strukturalnego i obiektowego; (2) cztery języki obiektowe z rozdziału; (3) który z nich jest na tych zajęciach i dlaczego nazywamy go wieloparadygmatowym.
Ćwiczenie 2. Podpisz składowe łatwe
Skopiuj klasę Prostokat z rozdziału. Przy każdej linii dopisz komentarz:
klasa (szablon) / atrybut / konstruktor / metoda / instancja
(instancję tworzysz w main, który dopiszesz).
Uruchom program dla boków 3 i 4 (pole 12, obwód 14).
Ćwiczenie 3. Klasa według wzoru łatwe
Klasa Uczen: pola imię i średnia, konstruktor, metoda
czyOtrzymujeStypendium() — prawda, gdy średnia ≥ 4.75.
W main wczytaj dane jednego ucznia i wypisz tak/nie. We/wy tylko w main.
Ćwiczenie 4. Dwa zapisy średnie
Zadanie: temperatura w Celsjuszach → Fahrenheity oraz komunikat „mróz”, gdy C < 0.
Najpierw wersja z funkcjami, potem klasa Temperatura z polem i dwiema metodami.
W komentarzu na górze pliku: co się stało z daną „stopnie” po przejściu na obiekt.
c jako argument. W klasie c jest polem;
metody nie powtarzają tego argumentu.
Ćwiczenie 5. Cechy języka obiektowego średnie
Własnymi słowami (akapit, nie tabela): klasy, hermetyzacja, dziedziczenie — co dają programiście. Podaj jeden przykład spoza C++ (Java, C# albo Python) i napisz, czy na sali ten język kompilujesz. Nie kopiuj tabeli z rozdziału.
Ćwiczenie 6. Klasa czy funkcja średnie
Dla każdego punktu: „klasa” albo „funkcja” + jedno zdanie uzasadnienia:
- NWD dwóch liczb całkowitych;
- konto bankowe (numer, saldo, wpłata, wypłata);
- sprawdzenie, czy rok jest przestępny;
- trzy produkty w koszyku, każdy z nazwą i ceną.
Ćwiczenie 7. Szkic, nie kod trudne
Wybierz: sklep (produkt, koszyk) albo dziennik (uczeń, przedmiot, ocena). Na kartce albo w pliku tekstowym: 2–4 klasy, pola, metody, jedno zdanie odpowiedzialności na klasę. Zaznacz, co zostaje zwykłą funkcją (np. średnia z tablicy ocen). Nie pisz jeszcze pełnego C++.
Ćwiczenie 8. Kod mieszany trudne
Masz taki szkic (możesz go wpisać i uruchomić, potem poprawić):
string tytul1 = "Pan Tadeusz", tytul2 = "Lalka";
bool wolna1 = true, wolna2 = true;
void wypozyczPierwsza() { wolna1 = false; }
void wypozyczDruga() { wolna2 = false; }
Zaproponuj spójny podział obiektowy (jakie klasy, co znika z globalnych zmiennych).
Zaimplementuj jedną klasę Ksiazka i pokaż dwa obiekty zamiast indeksów 1 i 2.
Sprawdź się
Wymagania na ocenę
Ocena wyższa zawiera wymagania na oceny niższe. Dotyczy powtórzenia i paradygmatu obiektowego.
| Ocena | Uczeń |
|---|---|
| 2 | Rozróżnia program strukturalny (funkcje) i obiektowy (klasy). Wymienia przykładowe języki obiektowe (C++, C#, Java, Python). |
| 3 | Przypomina definicję klasy (wzór / szablon), obiektu (instancja), atrybutu i metody. Pisze krótki program z funkcją i prostą klasą według wzoru. |
| 4 | Porównuje paradygmat strukturalny z obiektowym na tym samym zadaniu. Charakteryzuje cechy języka obiektowego (klasy, dziedziczenie, hermetyzacja). |
| 5 | Uzasadnia, kiedy warto wydzielić klasę, a kiedy wystarcza funkcja. Projektuje aplikację obiektową na poziomie szkicu (klasy i odpowiedzialności). |
| 6 | Analizuje gotowy kod mieszany i proponuje spójny podział obiektowy. |