INF.04 · C# · lekcja 10
Wprowadzenie do programowania obiektowego — klasy i obiekty
Jedna klasa, dwa różne obiekty
- Zrozum
- Sprawdź
- Napisz sam
Po tej lekcji: jedna klasa, dwa różne obiekty
Dzisiaj zrobisz konkretną rzecz
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.
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.
Sprawdź w działaniu
Jedna klasa, dwa różne obiekty
Najpierw przewidź wynik. Zmień dane w modelu i porównaj efekt. Spróbuj także przypadku granicznego, a nie tylko pierwszego poprawnego przykładu.
Model pokazuje wybraną zasadę. Nie uruchamia ani nie ocenia wklejonego kodu C#.
1. Przygotuj i uruchom własny projekt
2. Najpierw mały przykład
Wykonaj tę próbę przed dłuższym rozwiązaniem. class opisuje typ, new tworzy instancję. pierwszy i drugi wskazują dwa obiekty tej samej klasy. Tytul jest właściwością konkretnej instancji, a nie jedną wspólną wartością wszystkich filmów.
var pierwszy = new Film { Tytul = "Diuna" };
var drugi = new Film { Tytul = "Hobbit" };
Console.WriteLine(pierwszy.Tytul);
Console.WriteLine(drugi.Tytul);
class Film
{
public string Tytul { get; set; } = "";
}
Diuna Hobbit
- Co sprawdzić? Zmień jedną wartość i przed uruchomieniem zapisz przewidywany rezultat. Porównaj go z opisem wyniku; przy błędzie wróć do konkretnej instrukcji.
Jak to działa — 1
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() { ... } }
Jak to działa — 2
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.
3. Pełny przykład — czytaj od Main
Teraz zastąp Program.cs tym programem. Zanim uruchomisz, znajdź dane wejściowe, operację i miejsce prezentacji wyniku. W tym wariancie zachowujemy jawny Main. Nie wklejaj kilku pełnych programów do jednego pliku.
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();
}
}
- Prześledź kod
film1ifilm2to DWA NIEZALEŻNE obiekty tej samej klasyFilm— każdy ma własne wartości pólTytul,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 wfilm1w żaden sposób nie wpływa nafilm2.
Sprawdź, zanim przepiszesz cały program
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).
Ćwiczenie z pomocą · samodzielna praca
4. Teraz Twoja zmiana
Zdefiniuj klasę Ksiazka z polami Tytul i Autor oraz metodą WyswietlInfo(), utwórz dwa obiekty i wyświetl ich dane.
Spełnij warunki polecenia. Zapisz wejście, otrzymany wynik i wyjaśnij, która część kodu za niego odpowiada.
? Potrzebujesz pomocy? Rozwiązuj krok po kroku.
Krok 1 — pokaż podpowiedź
Wróć do podstawowej formy oraz objaśnienia: class opisuje typ, new tworzy instancję. pierwszy i drugi wskazują dwa obiekty tej samej klasy. Tytul jest właściwością konkretnej instancji, a nie jedną wspólną wartością wszystkich filmów.
Krok 2 — pokaż podpowiedź
Zmień tylko część potrzebną do polecenia. Zachowaj działającą wersję przed zmianą i uruchamiaj po każdym małym etapie.
Krok 3 — pokaż podpowiedź
Sprawdź przypadek zwykły i graniczny; porównaj z regułą: Diuna Hobbit
Otwórz tylko tyle podpowiedzi, ile potrzebujesz. Po każdym kroku wróć do zadania i sprawdź wynik.
5. Sprawdź rozumienie, nie tylko uruchomienie
Dalej na swoim koncie
Rozgrzewki, quiz i zadania są w biurku ucznia.
Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.
Zaloguj się →