Na obrazku klasa Repository jest dla klasy Server?
Na obrazku klasa Repository jest dla klasy Server?
Wyjaśnienie i uzasadnienie dydaktyczne
Poprawna odpowiedź: D
Uzasadnienie i szersze wyjaśnienie:
Przedstawiony diagram UML ilustruje jeden z kluczowych wzorców projektowych – Wstrzykiwanie zależności (Dependency Injection), który jest realizacją zasady odwracania zależności.
- Klasa
Servernie tworzy sama instancji repozytorium. Zamiast tego, otrzymuje ją z zewnątrz poprzez swój konstruktor:Server(repository: Repository). - Co ważniejsze, klasa
Servernie zależy od konkretnej implementacji repozytorium (takiej jakRepositoryImplczyRepositoryMock), ale od interfejsu (<<interface>> Repository).
Takie podejście, w którym klasa zależy od abstrakcji (interfejsu), a konkretna implementacja jest dostarczana („wstrzykiwana”) z zewnątrz, nazywane jest luźnym powiązaniem (loose coupling) lub właśnie zależnością miękką. Pozwala to na dużą elastyczność – w zależności od potrzeb można podać klasie Server różne implementacje repozytorium (np. prawdziwą implementację w środowisku produkcyjnym i atrapę RepositoryMock w testach jednostkowych) bez potrzeby modyfikowania kodu samej klasy Server.
Dlaczego pozostałe odpowiedzi są nieprawidłowe?
- A. Zależnością twardą (tight coupling): Byłaby to sytuacja, w której klasa
Serversama tworzyłaby konkretną instancję, np.repository = new RepositoryImpl();. Wtedy byłaby na stałe związana z tą jedną, konkretną implementacją. - C. Klasą pochodną: Na diagramie nie ma relacji dziedziczenia między klasą
ServeraRepository.RepositoryImpliRepositoryMockto klasy implementujące interfejsRepository, aleServernie jest w tej relacji.
Chcesz poćwiczyć całą kwalifikację INF.04?
Egzamin próbny na czas, nauka działami, losowe pytanie albo przegląd całej bazy — wszystko w przeglądarce i bez zakładania konta.
Pojęcia z tego pytania
- Wzorce projektowe (Design Patterns GoF)Sprawdzone, uniwersalne i wielokrotnie wykorzystywane schematy rozwiązań typowych, powtarzających się problemów architektonicznych w programowaniu obiektowym.
- Dziedziczenie (Inheritance w OOP)Mechanizm programowania obiektowego pozwalający klasie pochodnej (podrzędnej) na przejęcie pól i metod z klasy bazowej (nadrzędnej) oraz ich rozszerzenie lub modyfikację.
- System kontroli wersji Git (VCS)Rozproszony system kontroli wersji śledzący zmiany w plikach źródłowych i ułatwiający zespołową pracę programistów nad projektem.
Podobne pytania z działu „Klasy obiekty i metody”
Ten sam obszar materiału z kwalifikacji INF.04. W całej bazie znajdziesz 38 pytań z tego działu.
- #87
Przedstawiony zapis w języku C# oznacza definicję klasy Car, która:
- #134
W przedstawionym kodzie zdefiniowano abstrakcyjną klasę figura i dziedziczącą po niej klasę prostokąta ze zdefiniowanymi polami i konstruktorami. Wskaż minimalną implementację sekcji /* metody klasy */ dla klasy Prostokat:
- #136
W języku C# szablon List implementuje funkcjonalność listy. Z inicjalizacji obiektu wykaz wynika, że jego elementami są:
- #150
W językach C++ lub C# słowo kluczowe virtual można stosować do
- #153
Zastosowanie modyfikatora abstract w definicji metody klasy oznacza, że