Obiekt - pojęcie lub obiekt materialny, który może być wyodrębniony z otoczenia.
Podejście Obiektowe
1.wszystko jest obiektem 2.program jest zbiorem obiektów które wysyłają sobie komunikaty 3.każdy obiekt posiada pamięć na którą składają się inne obiekty 4.każdy obiekt posiada swój typ 5.wszystkie obiekty tego samego typu mogą otrzymywać te same komunikaty
Obiekty - Obiekt ma stan, zachowanie i tożsamość:
stan - dane wewnętrzne
zachowanie - zestaw metod (funkcji) do wykonania
tożsamość - każdy obiekt można w sposób jednoznaczny odróżnić od innych obiektów
Klasa - definicja zbioru podobnych obiektów. Wszystkie obiekty tej samej klasy mają jednakową strukturę i zachowania.
Klasa abstrakcyjna - taka klasa jest wzorcem dla innych podklas, niezmaterializowana - nie można z niej tworzyć obiektów, wykorzystywana do dziedziczenia,
Metody abstrakcyjne: nie jest implementowana/brak ciała, można stworzyć jedynie wewnątrz klasy abstrakcyjnej, przed metodą słowo abstract
Interface - schemat/wzór metod w klasie, klasa implementująca (implements) musi posiadać wszystkie metody z interfejsu
Klasa generyczna JAVA / Szablon C++ - klasa niezależna od typu, np. class Kalkulator<T> , Kalkulator<Integer> k = new Kalkulator<Integer>(); uwaga tablica w JAVA: T tab[] = (T[])new Object[];
Dziedziczenie extends- związek pomiędzy klasami, w którym dana klasa przejmuje strukturę albo zachowanie zdefiniowane w innej klasie lub klasach.
Enkapsulacja - oznacza sposób chowania wszystkich szczegółów obiektu, które nie wnoszą wkładu do jego podstawowej charakterystyki. Zwykle ukryta jest struktura obiektu i implementacja jego metod.
Implementacja - to kod umożliwiający wykonanie żądań przez obiekt, ciało metod.
Hermetyzacja - Ukrywanie danych i kontrola dostępu w Javie. Zalety ukrywania implementacji: ochrona danych i szczegółów implementacji przed ingerencją z zewnątrz możliwość zmiany implementacji klas bez wpływu na poprawność działania aplikacji ukrywanie nieistotnych szczegółów implementacji. Java obsługuje kilka poziomów kontroli dostępu:
public - dostępne dla każdego
private - tylko twórca klasy
protected - dostęp mają tylko dana klasa i klasy dziedziczące.
Przesłanianie - w dziedziczeniu, ta sama nazwa, ilość i typy parametrów, ten sam typ zwracany - inne tylko ciało
Przeciążanie - ta sama nazwa, inna ilość lub typ parametrów, może być inny typ zwracany
Static - pole - zmienna globalna, ta sama wartość w ramach wszystkiech klas tego samego typu, można zmieniać wartość
Final - pole - zmienna ze stałą wartością, metoda - nie można przesłaniać, klasa - nie można dziedziczyć
Klasa Obiekt Jest nadklasą (klasą macierzystą) wszystkich innych klas w Javie
Problem kompilatora: jaki kod ma zostać wykonany
Rozwiązanie: sposób wiązania, polimorfizm - pojęcie teorii typów wg którego sposób wykonania danej operacji zależy od typu obiektu.
Wczesne wiązanie - kompilator generuje wywołanie funkcji, program łączący (linker) zamienia nazwę na konkretny adres.
Późne wiązanie - kompilator umieszcza zamiast wywołania metody fragment kodu, który przeprowadza obliczenie adresu metody dopiero w czasie działania programu.
Polimorfizm - Polimorfizm to najważniejsza cecha, która umożliwia dostosowanie działania obiektów do własnych oczekiwań poprzez łączenie funkcjonalności zarówno dziedziczonej, jak i implementowanej samodzielnie. Idea polimorfizmu bazuje na tym, że użytkownik obiektu nie wie i nie musi wiedzieć, czy konkretne zachowanie wykorzystywanego obiektu zostało zrealizowane bezpośrednio w tym obiekcie czy też w tym, po którym dziedziczy on swoje właściwości. Ponadto może się okazać, że takie samo odwołanie do metody za każdym razem dotyczy innej akcji. Może się też okazać, że w zależności od poziomu dziedziczenia pozornie ta sama metoda (nazywająca się tak samo) wykonuje inną akcję.
Zwierze k = new Kot();
Zwierze p = new Pies();
k.odglos();
p.odglos();
Rzutowanie w górę - to zmiana sposobu patrzenia na obiekt - tak jakby był obiektem klasy bazowej
Rzutowanie w dół - to zmiana sposobu patrzenia na obiekt - tak jakby był obiektem klasy dziedziczącej
RTTI - mechanizm dynamicznego pozyskiwania informacji o typach obiektów w trakcie wykonania się programu
Operator instanceof zwraca true jeśli lewy operand jest tej samej klasy lub podklasy jak i prawy. Prawy operand może być również typu interface, wtedy test określa czy obiekt będący lewym argumentem implementuje ten interfejs. np. if (k instanceof z)
Garbage Collector Java: odśmiecacz pamięci, który wykrywa i usuwa obiekty nieużywane. Odśmiecacz pamięci: wykrywanie które obiekty sa nieużywane zwalnianie pamięci po tych obiektach Upraszcza problemy projektowe, zapobiega przeciekom pamięci.
Wyjątki Obsługa błędów wymuszona przez język programowania: wyjątek jest obiektem sygnalizowany z miejsca błędu przechwytywany przez odpowiednią procedurę obsługi, uwaga na kolejność wyjątków, wyjątek największy Throwable
Wyjątki służą również do sterowania programu, w przypadku wykrycia błędów.
Wyjątki weryfikowane: throws, throw new, try, catch (pełna obsługa błędu)
Wyjątki nieweryfikowane: throw new (niepełna/nieznana obsługa)
Operator rzutowania typów Jest używany do wymuszenia zmiany typu wyrażenia. Rzutowanie może być użyte do zmiany typu wartości podstawowych, np. zamieniając wartość double na int: int obszar = (int)(Math.PI * diameter);
Listy w Javie - gotowe klasy do tworzenia list, przykładowe medoty add(Object),remove(Object),remove(indeks),size(),get(indeks):
ArrayList - jest szybsza w dostępie do dowolnego elementu
LinkedList - jest szybsza w usuwaniu i dodawaniu dowolnego elementu