-
Notifications
You must be signed in to change notification settings - Fork 1
Klasy
- Autor: Jan Napieralski
- Ostatnia data aktualizacji: 04.03.2023
- Materiały pomocnicze
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.
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
- Wybieramy co chcemy opisać np. wszystkie samochody
- Tworzymy opis ogólny samochodu (nazwa, marka, cena itp.)
- Tworzymy obiekt z opisu ogólnego będący konkretnym samochodem według naszego schematu, opisu ogólnego
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
Mechanizm | Klasa | Struct |
---|---|---|
opisuje przepis na obiekt | ✅ | ✅ |
atrybuty | ✅ | ✅ |
metody | ✅ | ⛔ |
modyfikatory dostępu | ✅ | ⛔ |
konstruktory | ✅ | ⛔ |
dziedziczenie | ✅ | ⛔ |
polimorfizm | ✅ | ⛔ |
abstrakcja | ✅ | ⛔ |
- 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