OOP Flashcards

1
Q

Czym jest abstrakcja ?

A

Abstrakcja jest modelem rzeczywistego obiektu lub zjawiska, ograniczonego do pewnego kontekstu, przez co dokładnie przedstawia szczegóły związane z tym kontekstem, ale pomija pozostałe.

Obiekty programu nie reprezentują jednak swoich rzeczywistych pierwowzorów w pełni (i rzadko muszą). Zamiast tego, modelują one atrybuty i zachowanie prawdziwych obiektów w pewnym kontekście, ignorując resztę.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Hermetyzacja

A

Hermetyzacja to zdolność obiektu do ukrywania części swojego stanu i zachowania przed innymi obiektami, eksponując reszcie programu tylko ograniczony interfejs.

Hermetyzować coś oznacza uczynić to coś prywatnym , a tym samym dostępnym wyłącznie w obrębie metod swojej klasy. Istnieje nieco mniej restrykcyjny poziom dostępu zwany chronionym , który czyni składową klasy dostępną także podklasom.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Interfejs ogólnie

A
  • typ abstrakcyjny posiadający jedynie operacje a nie dane.
  • nie może być utworzony obiekt tego typu
  • referencja może wskazywać na dowolny obiekt klasy implementującej interfejs
  • interfejs udostępnia operacje, nie zawiera ich implementacji i danych
  • klasy mogą implementować wiele interfejsów, bez problemów wielkrotnego dziedziczenia
  • pozwala na hermetyzacje obiektów, utworzonych w oparciu o klasy zawierające implementacje
  • kontrakt gwarantujący zestaw zachowań
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Dziedziczenie

A
  • możliwość tworzenia nowych klas na bazie istniejących
  • możliwość ponownego wykorzystania kodu - jeśli potrzebujesz stowrzyć klasę która rozszerza obecną
  • podklasa przejmie metody i pola klasy bazowej (metody które są inne niż private)
  • problem z hermetyzacja - przejmuję metody z interfejsu rodzica
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Polimorfizm

A
  • zdolność programu do wykrywania faktycznej klasy obiektu i wywoływania jego implementacji nawet gdy typ jest nieznany w danym kontekście.
  • zdolności obiektów różnych klas do bycia traktowanymi jako instancje tej samej klasy, najczęściej klasy bazowej lub interfejsu.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Czym jest zależność pomiędzy obiektami ?

A
  • najbardziej podstawowy i najsłabszy związek między klasami
  • jeśli pewne zmiany w definicji jednej z nich mogą skutkować modifikacjami drugiej
  • gdy ktoś zmieni metodę getKnowledge() klasy Course to kod się popsuje
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Asocjacja

A
  • relacja w której jeden obiekt korzysta z innego lub wchodzi w interakcje z innym obiektem
  • rodzaj zależności, w której obiekt zawsze ma dostęp do obiektu z którym wchodzi w interakcję
  • stosowana do przedstawienia takich elementów jak na przykład pole klasy
  • jeśli zmieni się kod remember() w klasie Student to zepsuje klase profesor
  • Student jest cześcią klasy Professor
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Agregacja

A
  • szczególny rodzaj asocjacji
  • reprezentuje relacje one - to many oraz many-to-many
  • zazwyczaj obiekt “posiada” zestaw innych obiektów
  • jeden obiekt służy za kontener
  • komponent może istnieć bez kontenera
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Kompozycja

A
  • szczególny rodzaj agregacji
  • obiekt składa się z jednej lub więcej instancji innego
  • ## obiekt może istnieć tylko jak cześć kontenera
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Jakie są rodzaje polimorfizmu ?

A
  1. Compile-Time polymorphism
    - mehod overloading
    - static polymoprhism
  2. Runtime Polymoprhism
    - method overriding
    -
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Polymorphims szczegóły działania

A
  • Java cechuje się silnym typowaniem , kod programu musi zawsze określać typ obiektu podczas deklaracji zmiennych
  • możemy również **zadeklarować zmienną której typem jest nadklasa i przypisać jej instancję jednej z podklas **
Dancer breakdancer = new Breakdancer("Mati", 19); // Konwersja rozszerzająca do typu podstawowego
        Dancer electricBoogieDancer = new ElectricBoogieDancer("Zuzia", 20); // Konwersja rozszerzająca do typu podstawowego

        List<dancer> disco = Arrays.asList(dancer, breakdancer, electricBoogieDancer);
        for (Dancer d : disco) {
            d.dance(); // Wywołanie metody polimorficznej
        }
  • odbywa się tutaj niejawna konwersja rozszerzająca przez kompilator - odwołanie do obiektu jest traktowanie jak odwołanie do klasy bazwoej
  • Dancer ma wiele form
  • każda z form może mieć własne unikalne zachowanie
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Zalety polimorfizmu

A
  • ogólne metody i klasy, które mogą pracować z różnymi typami obiektów, a nie tylko z jednym konkretnym.
  • jednen interfejsu do operowania na różnych typach obiektów
  • dodawanie nowych klas, które implementują dany interfejs lub dziedziczą po danej klasie bazowej, bez konieczności modyfikowania istniejącego kodu korzystającego z tego interfejsu lub klasy bazowej.
    5. Ułatwienie testowania
    6. wsparcie SOLID
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wady dziedziczenia

A

1.** Zbyt złożona hierarchia klas**: Nadmierne korzystanie z dziedziczenia może prowadzić do skomplikowanych hierarchii klas, co może utrudniać zrozumienie i utrzymanie kodu.

  1. Brak hermetyzacji: Dziedziczenie narusza hermetyzację, ponieważ podklasa może uzyskać dostęp do chronionych członków klasy nadrzędnej. Może to prowadzić do nieprzewidywalnych efektów ubocznych.

3.** Ryzyko nieodpowiedniego dziedziczenia**: Istnieje pokusa, aby wykorzystać dziedziczenie do osiągnięcia ponownego użycia kodu, nawet gdy relacja “jest rodzajem” (is-a) nie jest logiczna lub odpowiednia.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Interfejs vs Klasa Abstrackcyjna

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Kiedy użyc klasy abstrakcjnej a kiedy interfejsu

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Cechy Interfejsu

A
17
Q

Cechy klasy abstrakcyjnej

A
18
Q

Interfejs funkcyjny

A
  • posiada jedną metodę abstrakcyjną
  • Adnotacja @FunctionalInterface
  • Zastosowanie w wyrażeniach lambda:
19
Q

Interfejs w javie cechy

A
  • **jest typem referencyjnym **( jeśli referencja zmiennej jest interfejs to klasa musi implementować interfejs)
  • kontrakt gwarantujący zestaw zachowań
    * mechanizm do osiągania abstrakcji
  • nie zawiera **zmiennych instancyjnych **ponieważ reprezentuje jakaś abstrakcję
  • nie można go utwrzoyć jak klasy
    interfejs może dziedziczyć po wielu interfejsach
20
Q

Co może zawierać interfejs ?

A
  1. deklaracje metod (automatycznie public abstract)
    stałe (automatycznie public static finał)
  2. metody domyślne (default modifier)
  3. metody publiczne statyczne (static)
  4. metody prywatne
  5. metody statyczne prywate
21
Q

Co się stanie jeśli nie dostarczymy konstruktora ?

A
  • kompilator automatycznie dostarczy dla niej domyślny konstruktor bezargumentowy
  • ten domyślny konstruktor wywoła domyślny konstruktor klasy nadrzędnej (nadklasy) poprzez wywołanie super().
22
Q

Czy klasa abstrakcyjna musi mieć abstrakcyjne metody ?

A
  • nie
  • ale jeśli istnieje jedna metoda abstrakcyjna to klasa musi być abstrakcyjna
23
Q

Do czego służy this keyword ?

A
  1. Odróżnianie pól: “this” używa się do odróżnienia pól klasy od lokalnych zmiennych
  2. Wywoływanie konstruktorów: W konstruktorze “this” używa się do wywołania innego konstruktora w tej samej klasie
  3. Przekazywanie bieżącego obiektu do innej metody: Można użyć “this” do przekazania obecnego obiektu do innej metody lub konstruktora
  4. i odwoływania się do zmiennych instancyjnych w obecnej instancji klasy.
24
Q

Czym jest obiekt

A
  • instancja klasy
  • zawiera stan (zmienne instancyjne)
  • zawiera metody (zachowanie)
  • tworzone przy pomoca slowa new
25
Q

Czym jest klasa

A
  • jest to schemat, które definuje jakie, zmienne i metody bedą dostępne dla obiektów tego typu
  • określa strukturę obiektu ale sama nie jest obiektem
26
Q

Co to jest konstruktor

A
  • specjalna metoda w klasie, która jest wywoływana podczas tworzenia nowego obiketu
  • używany do inicjalizacji nowego obiektu
  • musi być identyczny jak nazwa klasy i nie ma typu zwracanego
27
Q

Co to są zmienne statyczne ?

A
  • zmienne związane z klasą a nie z konkretnym obiektem
  • ## istnieje tylko jedna kopia zmiennej statycznej dla danej klasy
28
Q

Co to są metody statyczne ?

A
  • metody, które są związane z klasą, anie z konkretnym obiektem
  • mogą działać tylko na zmiennych statycznych i nie mają dostępu do zmiennych instancyjnych ani metod instancji
29
Q

Co może zrobić klasa dziedzicząca ?

A
  1. Dziedziczenie pól i metod: Dziedziczenie zmiennych instancyjnych i metod oznaczonych jako protected, dostępu pakietowego oraz public.
  2. Nadpisywanie metod: Możliwość dostarczenia własnej implementacji metody klasy nadrzędnej. Zalecane użycie adnotacji @Override.
  3. Używanie konstruktora klasy nadrzędnej: Wywoływanie konstruktorów klasy nadrzędnej przez super.
  4. Rozszerzanie funkcjonalności: Dodawanie nowych pól i metod, które nie istniały w klasie nadrzędnej.

5.** Dostęp do zmodyfikowanych pól i metod**: Używanie public lub protected akcesorów dla pól oznaczonych jako private w klasie nadrzędnej.

  1. Implementowanie interfejsów: Możliwość implementowania wielu interfejsów oprócz dziedziczenia po jednej klasie nadrzędnej.
  2. Rozszerzanie i ograniczanie dostępu: Zmiana poziomu dostępu składników klasy nadrzędnej, bez możliwości ograniczenia go.
  3. Dziedziczenie atrybutów statycznych: Dziedziczenie metod i zmiennych statycznych, z uwzględnieniem, że nie można ich nadpisać w tradycyjnym sensie, ale można “ukryć”.
30
Q

Słowo super ?

A
  • Wywołanie konstruktora klasy nadrzędnej
  • Odwołanie się do metody klasy nadrzędnej:
  • Odwołanie się do zmiennej klasy nadrzędnej
31
Q

Użzycie słowa final

A
32
Q

Jak rozwiazać dodawanie nowych metod do interfejsu

A
  1. Metody domyślne (default methods):
    * Pozwalają na dodawanie nowych metod z domyślną implementacją do interfejsów, bez wpływu na istniejące klasy implementujące.
    * Klasy implementujące mogą nadpisać tę domyślną implementację, jeśli to konieczne.
  2. Metody statyczne
    * Pozwalają na dodawanie metod statycznych do interfejsów.
    * Te metody są częścią interfejsu i nie mogą być nadpisywane przez klasy implementujące.
33
Q

Jaka jest zasada modyfikatrów dostępu przy method overriding

A
  • modyfikator musi być taki sam bądź mniej restrykcyjne
  • nie może być bardziej restrykcyjny
34
Q

Jak wygląda przy overrride gdy metoda rzuca wyjątek

A
  • oveeridowana metoda może rzucić ten sam wyjątek albo z lini dziedziczenia
35
Q

Czym jest kohezja

A
  • w jakim stopniu klasy pracują wspólnie aby osiągnąc określony cen
  • wysoka kohezj oznacza, że są mocno związane aby osiągać cel
36
Q

Covariant

A
  • zdolność subclassy do bycia użytą w miejscu superclass
37
Q

Protected members

A
  • dostęp tylko w tym samym pakiecie
  • albo w hierarchi dziedziczenia
38
Q

Jak działa HashMapa ?

A
  • w przypadku put() oraz get() mapa wywołuje metode hashcode() na obiekcie klucz a następnie używa własnej funkcji hashującej, by określic bucket Map.Entry
  • w przypadku gdy dla dwóch kluczy hashCode() zwraca tą samą wartość - kolizja
  • dla takich samych hashcode() mapa wywołuje metode equals()
  • jeśli equals() zwróci false to oznacza, że dwa różne klucze - tworzy BinaryTree od Javy
  • jest equals() zwróci true to zastępuje wartość
  • przy kolizji O (log n)
  • array of binary trees
39
Q
A