na teście: Po co stosuje się klasę abstrakcyjną?

0

Trafiłem na takie pytanie na teście :

Po co stosuje się klasę abstrakcyjną?

a) Aby zawierała wspólne zachowanie dla klas z niej dziedziczących.
b)Stosujemy ją kiedy chcemy stworzyć klasę nie mającą znaczenia biznesowego, dopiero klasy dziedziczące nadają znaczenie.
c)Nie powinno się ich już stosować, zastępują je interfejsy.

Mi jakoś pasuje b. Ale c jest też dość kuszące.

0

Jakby się tak głębiej przyjrzeć to wszystkie odpowiedzi można uznać za prawidłowe. Bez sensu są te warianty odpowiedzi. A jest jeszcze w porządku. B też jest ok, bo klasy dziedziczące od abstrakcji są klasami wyspecjalizowanymi. To tak jakby mieć klasę abstrakcyjną Samochód i zrobić specjalizację jako klasę Ford i dopiero klasa Ford ma znaczenie w systemie. Też się zgadza. Co do C to też jest prawdą :) Interfejsy zastępują np. wielodziedziczenie, bo klasa może dziedziczyć wiele interfejsów.

Wszystkie odpowiedzi są ok (no może oprócz C, dlaczego to poniżej napisałem) :P

Może... A bym zaznaczył jak już jedno miałbym wybrać. Wspólne zachowania czyli wspólne metody dziedziczone po klasie abstrakcyjnej. Mogą mieć inne ciało ale co do nazwy metod to są wspólne. C odpada, bo nikt nie zabroni mi dziedziczyć po klasie abstrakcyjnej, bo ona przecież od tego jest. Co innego wielodziedziczenie ale to już napisałem. Natomiast B... to właściwie to samo co A hehe. Zawsze możesz zrobić wyliczankę.

0

IMO zarówno odpowiedź A, jak i B są prawidłowe. C odpada, bo nie zawsze sam interfejs zdaje egzamin.

1

A dlaczego niby klasa mająca znaczenie biznesowe nie może być abstrakcyjna?

1

Jakakolwiek próba tworzenia reguł w programowaniu mija się z celem - szczególnie takie zamykanie w odpowiedzi a b lub c.
tak że, zamykam temat.

0

szczerze to c w żadnym razie, i interfejsy i klasy abstrakcyjne się stosuje i oba elementy mają nieco inne zastosowanie :)

0

c)Nie powinno się ich już stosować, zastępują je interfejsy.

to nie jest odpowiedź na pytanie, więc odpada bez zbędnych przemyśleń.

b)Stosujemy ją kiedy chcemy stworzyć klasę nie mającą znaczenia biznesowego, dopiero klasy dziedziczące nadają znaczenie.

czemu tylko w javie używa się tak często słowa "biznes". co ono w ogóle oznacza w tym kontekście? poszerzenie funkcjonalności? w takim razie odpada, bo klasa abstrakcyjna może posiadać zaimplementowane metody.

a) Aby zawierała wspólne zachowanie dla klas z niej dziedziczących.

poprawna odpowiedź

2

a) Nie opisuje tylko klas abstrakcyjnych. Bo przecież wspólne zachowanie może też zawierać dowolna klasa bazowa, wcale nie musi być abstrakcyjna. Niemniej prawdą jest że zwykle klasa abstrakcyjna jest stworzona po to aby zawierać wspólne zachowanie z którego korzystają klasy dziedziczące i to jest zapewne odpowiedź poprawna.
b) To nie jest prawda. Klasa abstrakcyjna może mieć znaczenie biznesowe i w praktyce raczej je ma. Klasa grupuje zbiór obiektów o pewnych cechach. Mimo że nie tworzymy obiektów klasy "Pojazd" tylko jego konkretne implementacje to jednak Pojazd jako taki ma znaczenie "biznesowe".
c) Co prawda java 8 wprowadza możliwość implementowania metod w interfejsach to nadal interfejs nie zastąpi klasy abstrakcyjnej bo interfejs nie może posiadać pól.

0

A teraz bez zbędnych dywagacji - prawidłowe odpowiedzi to A i B. Wiem z jakiego to jest testu więc lekko Ci pomogę ;)

1

imo durne pytanie i mozliwe odpowiedzi. rownie dobrze mozna uzasadnic wybranie A, B i C jak i nie wybranie zadnej.

1

Nienawidze takich testow, podobne mialem kiedys w jakims biurze hr. Wszystko zalezy od widzimisie pytajacego, w co wierzy, jakie artykuly przeczytal, i w jakim stadium rozwoju sie zatrzymal. Rob jak uczyli na zajeciach, a swoje przemyslenia zostaw na pozniej, jak bedziesz mial cos do powiedzenia, np. w pracy.

0

Jeśli test jest wielokrotnego wyboru to A i B, jeśli jednokrotnego to A.

Dlaczego B tak? Ponieważ klasa abstrakcyjna może być reprezentacją pewnej klasy obiektów biznesowych, ot przykładowo dana tutaj klasa "Samochód", czy też np. "Osoba" (podstawa dla osoby fizycznej i prawnej). Takie klasy mogą zawierać wspólne informacje biznesowe, odseparowane od reszty.

Ale jak to już zostało napisane - interpretacja może być różna. Wystarczy, że sprawdzającym będzie jakiś średni developer, który dzień wcześniej przez przypadek znalazł w Google frazę "Composition over inheritance" to i C zaraz zacznie wymagać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1