Obiektowość

Często rekruterzy techniczni zadawali pytanie o obiektowość:

  • Czym jest obiekt ?
     
    • Jest instancją (pojedynczym wystąpieniem) pewnej klasy (grupy)
    • Jak rozumiemy obiekt? Jest to byt ze świata. Obiektem może być np. krzeszło. Najczęśćiej to rzeczowniki określają obiekty.
    • "Obiekt ma stan, zachowanie i toższamość"
      • Stan => Cechy / Dane wewnętrzne, Pola / Atrybuty Klasy / Atrybuty Obiektu 
      • Zachowanie => Metody, funkcje realizujące pewne czynności
      • Toższamość => Każdy obiekt można odróżnić od innego / adres w pamięci
  • Czym jest Dziedziczenie / Generalizacja / Generalizacja-specjalizacja  ?
    • Dziedziczenie (zwane również Generalizacją) jest relacją "rodzic-dziecko" zachodzącą między dwoma klasami (potem również obiektami) w taki sposób, że mając klasę bazową tworzymy klasę pochodną dziedziczącą z niej cechy i zachowania, która umożliwia   rozszerzenie klasy bazowej poprzez wprowadzenie nowych cech i zachowań do klasy pochodnej. W notacji UML oznaczamy ją dużą trójkątną strzałką w od strony klasy pochodnej (podklasy) zwróconą do klasy bazowej (nadklasy).
    • Klasa pochodna jest szczególnym przypadkiem klasy bazowej.
  • Czym jest przysłonięcie (ang. Overriding) metod ?
    • Jest to nadpisanie, zmiana ciała metody, zmiana implementacji metody z nadklasy wewnątrz podklasy.
  • Czym jest przeciążenie (ang. Overloading) metod?
    • Jest to nadpisanie , zmiana typów lub kolejności argumentów metody, metody z obecnej klasy lub nadklasy.
  • Czym jest polimorfizm ?
    • pochodzi z greckich słów: "poly" znaczącego wiele oraz "morphos" znaczącego postać. Co razem znaczy wielopostaciowość.
    • Jedna klasa może mieć wiele swoich odpowiedników ( poprzez dziedziczenie ), które mogą zachowywać się w różny sposób (postać) wykonując to samo zadanie. 
    • Jest wywołaniem odpowiedniej metody w zależności od obiektu.
  • Jaka jest różnica między polimorfizmem a przysłonięciem?
    • Polimorfizm jest czymś bardziej złożonym. Wykorzystuje dziedziczenie, rzutowanie w górę (upcasting), późne wiązanie (late binding) oraz przesłonięcie (overriding) metody i jest wywołaniem odpowiedniej metody na podstawie cech otrzymanego obiektu.
    • Na poziomie kompilacji nie istnieje informacja jaka metoda powinna byc wywoływana. Dzieje się to dopiero podczas fazy wykonania programu.
      • np. Java dołącza odpowiedni kod wyliczający adres metody, którą powinna wywołana na podstawie cech otrzymanego obiektu.
    •  Przesłonięcie metod jest tylko zmianą (nadpisaniem) ciała metody z nadklasy wewnątrz podklasy.
  •  [Dodatkowe] Co to jest i na czym polega zasada zastępowalności
    • Zasada zastępowalności mówi o tym że klasa pochodna realizuje wszystkie zachowania z klasy bazowej (nadklasy) i odwrotnie. 
    • Polega to na tym, że nie zmieniamy interface-u (nie rozszerzamy klasy) ale jedynie przesłaniamy metody w klasie pochodnej. Dzięki temu oba obiekty mogą być używane zamiennie ale realizować zachowania w inny sposób.
  •  Co wiesz o refleksji ? Kojarzysz może w javie "Reflections" ?
    • Refleksja dla mnie jest sposobem na dostanie się do atrybutów, pól, metod klasy i obiektu w celu zautomatyzowania jakiegoś problemu.
    • Refleksja jest bardzo słabym podejściem do rozwiązania problemu. Jest dość wolna. Refleksji należy używać tylko gdy to konieczne lub gdy tworzymy jakąś bibliotekę, która automatyzuje nam np. proces inicjalizacji zmiennych na obiekcie.
    • Pozwala ona na tworzenie dynamicznego kodu.

Brak komentarzy:

Publikowanie komentarza