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.

Interviews - rozmowy kwalifikacyjne

Czas rozpocząć cykl dotyczący rozmów kwalifikacyjnych na stanowisku programisty...

Po kilku rozmowach, po których nie otrzymałem informacji zwrotnej o pomyślnej rekrutacji i chęci przyjęcia mnie na stanowisku programisty pomyślałem, że warto się bardziej przygotowywać.
Nie chodzi mi o to żeby coś wkuć na pamięć, ani jakoś super się przejmować i stresować. Wręcz przeciwnie. Na rozmowy na które przyszedłem wyluzowany z podejściem "jak by mi nie zależało" albo bardziej odpowiednie sformuowanie z pewnością siebie "swoje wiem, nie boję się pytań" oraz "jak nie my to kto, jak nie ta to inna [firma]", odnosiłem większe sukcesy aniżeli miałbym być czymś zestresowany.

A teraz po krótkim wprowadzeniu przejdźmy do cyklu przygotowawczego do rozmów kwalifikacyjnych. Pewnie po zamieszczeniu tu zadań jakie miałem w latach ≤ 2012 zadania zostały zmienione lub po mojej publikacji znikną całkiem z firm i pozostanie czytanie / pisanie kodu (na kartce papieru) którego nie widzieliśmy na oczy.

A więc do dzieła...

Simple & Look's Good PHP Bug Tracker - Bugs

It was a very hard to find free / open source Bug Tracking system written in PHP and without difficult installation process like Redmine. But now I have found it!

http://pixeline.github.io/bugs/

and many forks on github like https://github.com/GerritHoekstra/bugs
and my fork https://github.com/maveius/bugs - it is the same as https://github.com/GerritHoekstra/bugs but need to fork because GerritHoekstra maked good work.