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.

Ta interakcja wymaga włączonego JavaScriptu.

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.

Program.cscsharp
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; } = "";
}
Wynik
Diuna
Hobbit
  1. 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.

Program.cs — osobne uruchomieniecsharp
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();
    }
}
  1. Prześledź kod 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.

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.

Oczekiwany rezultat
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ę →
Źródła i dalsza nauka