Skip to content
Jan Napieralski edited this page Mar 11, 2023 · 3 revisions

Spis treści

Wróćmy do structów

Do tej pory po I semestrze na ITE pracując w C poznaliśmy structy. Struct opisujący studentów mógł wyglądać na przykład tak:

    struct Student{
        char name[20];
        int index_number;
        int age;
        double grade;
    };

Mamy tym sposobem przed nami deklaracje structa. Opisaliśmy właśnie jak w naszym programie będzie wyglądał każdy Student, jednak sama w sobie deklaracja niewiele robi. To tak jakby zapisać sobie przepis na pyszne ciasto, ale nigdy go nie użyć do zrobienia ciasta. W takim razie użyjmy naszego zadeklarowanego structa:

    Student st1;
    Student st2;

    st1.name = "Jan Kowalski";
    st1.index_number = 273036;
    st1.age = 20;
    st1.grade = 3.5;

    st2.name = "Agata Wolkowska";
    st2.index_number = 304509;
    st2.age = 19;
    st2.grade = 4.75;

Właśnie wykorzystaliśmy ogólny przepis (strukturę Student) do zrobienia 2 obiektów. Nasze obiekty są reprezentacjami ogólnej struktury, konkretnymi studentami z rzeczywistymi danymi, lub używając analogii przepisu kucharskiego, konkretnym ciastem zrobionym z ogólnego przepisu. Mogliśmy potem zrobić jakieś operacje na tak utworzonych obiektach, zmieniać ich dane, wstawiać do tablicy studentów itp.

Czym są klasy

No dobra, zapytacie po co wstawiłem przypominajkę z structów skoro zajmujemy się klasami. Na domiar złego, structy były w C i C++, a tutaj na zajęciach będziemy mieli Javę. Wszystko dlatego, że klasy są potężniejszymi structami

Zobaczmy na deklaracje (ogólnego opisu, przepisu) klasy w Javie:

    class Student{
        String name;
        int index_number;
        int age;
        double grade;
    }

Wygląda znajomo? Teraz użyjmy naszego przepisu do zrobienia konkretnego ciasta, zainicjalizujmy (czyli inaczej stwórzmy) obiekt klasy Student:

    // jeśli jesteście po 1 labolatoriach albo wykładzie to
    // kojarzycie tą klasę :)
    public class HelloWorld{

        // specjalna metoda, odpowiednik funkcji main z C++
        // więcej o strukturze programów w Javie dalej
        public static void main(String[] args){

            Student st1 = new Student();
            Student st2 = new Student();

            st1.name = "Jan Kowalski";
            st1.index_number = 273036;
            st1.age = 20;
            st1.grade = 3.5;

            st1.name = "Agata Wolkowska";
            st1.index_number = 304509;
            st1.age = 19;
            st1.grade = 4.75;
        }
    }

Widzicie przed sobą najprostszą deklarację klasy i jej użycie. Jeśli porównacie ją ze structem w C++, do tej pory zmienił się tylko drobnie sposób, w jaki inicjalizujemy (tworzymy) obiekt już nie:

    Student st1;

tylko:

    Student st1 = new Student();

W samej koncepcji klasa vs struct nie ma żadnej różnicy

  1. Wybieramy co chcemy opisać np. wszystkie samochody
  2. Tworzymy opis ogólny samochodu (nazwa, marka, cena itp.)
  3. Tworzymy obiekt z opisu ogólnego będący konkretnym samochodem według naszego schematu, opisu ogólnego

Po co nam to wszystko

Skoro pokazałem Wam, że sama koncepcja klas i structów nie ma żadnych różnic, to dlaczego tak dużo mówi się o klasach? Po co mamy cały przedmiot poświęcony programowaniu obiektowemu? Czemu jednym z głównych paradygmatów programowania. O co takie wielkie halo?

Klasy posiadają wiele mechanizmów (o których po kolei dowiecie się na zajęciach i z tych notatek) które ułatwiają nam, informatykom pracę. W niektórych językach programowania takich jak właśnie Java, C#, PHP i wiele innych jest bardzo mocne nastawienie na programowanie obiektowe za pomocą klas

Klasy vs structy

Mechanizm Klasa Struct
opisuje przepis na obiekt
atrybuty
metody
modyfikatory dostępu
konstruktory
dziedziczenie
polimorfizm
abstrakcja

Słowniczek pojęć do notatki

  • Deklaracja: zdefiniowanie, napisanie klasy lub struktury w której opisujemy jak będą wyglądały konkretne obiekty
  • Inicjalizacja: utworzenie obiektu danej klasy, struktury
  • Atrybut: zmienna w klasie/strukturze. Dla podanego przykładu Student posiada 4 atrybuty: name, index_number, age, grade. Każdy obiekt o tym typie będzie miał w sobie i dla siebie unikalne wartości tych zmiennych
Clone this wiki locally