Lekcja 10. Wprowadzenie do programowania obiektowego — klasy i obiekty
Trudny / egzaminacyjnyPo co się tego uczymy?
To jest moment zwrotny całego działu — programowanie obiektowe to fundament, na którym zbudowane są WSZYSTKIE technologie, których nauczysz się dalej w INF.04: okna WPF, ekrany .NET MAUI i kontrolery ASP.NET Core to wszystko klasy i obiekty. Zrozumienie tej lekcji otwiera drzwi do reszty kursu.
Teoria
Wszystko, czego uczyłeś się do tej pory (zmienne, pętle, metody), działało na pojedynczych, prostych wartościach. Programowanie obiektowe (OOP) to sposób organizowania kodu wokół OBIEKTÓW — bytów łączących w jedną całość dane (pola) i operacje na tych danych (metody).
Klasa to SZABLON (przepis) opisujący, jakie pola i metody będzie mieć dany rodzaj obiektu — sama klasa nie jest jeszcze żadnym konkretnym bytem, to tylko definicja.
Obiekt to KONKRETNY EGZEMPLARZ stworzony na podstawie klasy, ze swoimi własnymi wartościami pól — proces tworzenia obiektu z klasy nazywa się instancjonowaniem, a sam obiekt bywa nazywany INSTANCJĄ klasy.
Analogia: klasa "Film" to jak formularz "karta filmu" w wypożyczalni — pusty wzór z polami do wypełnienia (tytuł, rok, cena). Każdy KONKRETNY film (Diuna, Avatar, Matrix) to osobny, wypełniony egzemplarz tego formularza — obiekt.
Składnia definicji klasy w C#:
class Film { public string Tytul; public int Rok; public void WyswietlInfo() { ... } }
Tworzenie obiektu odbywa się słowem kluczowym new:
Film film1 = new Film();
Dostęp do pól i metod obiektu — przez kropkę:
film1.Tytul = "Diuna";
film1.WyswietlInfo();
Słowo kluczowe this wewnątrz metody klasy odnosi się do BIEŻĄCEGO obiektu, na którym metoda została wywołana — przydatne, gdy nazwa parametru metody pokrywa się z nazwą pola.
Schemat
KLASA Film (szablon/przepis) OBIEKTY (konkretne egzemplarze) ┌─────────────────────────┐ │ Pola: │ film1: Tytul="Diuna", Rok=2021 │ - Tytul │ new ─> film2: Tytul="Avatar", Rok=2009 │ - Rok │ new ─> film3: Tytul="Matrix", Rok=1999 │ Metody: │ │ - WyswietlInfo() │ Każdy obiekt ma WŁASNE wartości pól, └─────────────────────────┘ ale WSPÓLNE metody zdefiniowane w klasie.
Przykład z życia
Każdy telefon wyprodukowany według tego samego projektu (tej samej "klasy" telefonu) ma te same możliwości (aparat, ekran, bateria), ale KONKRETNY egzemplarz w Twojej kieszeni ma własny, unikalny stan — poziom naładowania baterii, liczbę zdjęć w pamięci. To dokładnie różnica między klasą a obiektem.
Kod (C#)
using System;
class Film
{
public string Tytul;
public int Rok;
public double Cena;
public void WyswietlInfo()
{
Console.WriteLine(Tytul + " (" + Rok + ") - " + Cena + " zł");
}
}
class Program
{
static void Main()
{
// tworzymy dwa osobne obiekty (instancje) klasy Film
Film film1 = new Film();
film1.Tytul = "Diuna: Część Trzecia";
film1.Rok = 2026;
film1.Cena = 12.99;
Film film2 = new Film();
film2.Tytul = "Ostatni bastion";
film2.Rok = 2019;
film2.Cena = 7.99;
film1.WyswietlInfo();
film2.WyswietlInfo();
}
}
Komentarz i wyjaśnienie kodu
film1 i film2 to DWA NIEZALEŻNE obiekty tej samej klasy Film — każdy ma własne wartości pól Tytul, Rok, Cena, ale oba "dziedziczą" (w sensie dostępności, nie dziedziczenia klas — o tym w Lekcji 13) tę samą metodę WyswietlInfo() zdefiniowaną raz, w klasie. Zmiana pola w film1 w żaden sposób nie wpływa na film2.
Ćwiczenie samodzielne
Zdefiniuj klasę Ksiazka z polami Tytul i Autor oraz metodą WyswietlInfo(), utwórz dwa obiekty i wyświetl ich dane.
Plac zabaw — wypróbuj online
Poniższy kod wykonuje się od razu w Twojej przeglądarce — nic nie trzeba instalować. Zmień kod i kliknij „Uruchom”.
Zadania do pracy własnej
Zdefiniuj klasę
Osobaz polamiImieiWiek, utwórz trzy obiekty reprezentujące różne osoby i wypisz ich dane w pętliforeachpo tablicy obiektów.Zdefiniuj klasę
Produktz polamiNazwa,Cena,IloscNaMagazyniei metodąWartoscMagazynowa()zwracającą iloczyn ceny i ilości. Utwórz kilka produktów i wypisz łączną wartość magazynu.Zbuduj klasę
Pracownikz polamiImie,Stanowisko,PensjaBazowai metodąObliczPremie(double procent)zwracającą wysokość premii. Utwórz listę (List<Pracownik>, Lekcja 8) kilku pracowników, oblicz i wypisz premię każdego z nich oraz sumę wszystkich premii w firmie.
Typowe błędy
Częsty błąd to próba użycia obiektu bez wcześniejszego stworzenia go słowem new — sama deklaracja Film film1; nie tworzy jeszcze obiektu, tylko "pustą" zmienną gotową go przechować. Drugi błąd: mylenie nazwy KLASY z nazwą OBIEKTU — Film to zawsze ten sam, jeden szablon, a film1, film2 to osobne, niezależne egzemplarze. Trzeci: zapominanie wielkiej litery w nazwach klas — to nie błąd składniowy, ale złamanie powszechnie przyjętej konwencji nazewniczej C# (PascalCase dla klas).
Nawiązanie do egzaminu zawodowego
To bezpośrednia realizacja efektu INF.04.4.5 z podstawy programowej: "stosuje zasady programowania obiektowego" — konkretnie kryteria dotyczące pojęć klasa, obiekt, metoda, pole oraz dzielenia zagadnienia na klasy.