classcontinue;Guitarif (searchSpec...

Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.
getType() != guitarSpec.getType())
Gui-
tar()
continue;
}
if (searchSpec.getBackWood() != guitarSpec.getBackWood())
continue;
Guitar.java
if (searchSpec.getTopWood() != guitarSpec.getTopWood())
continue;
matchingGuitars.add(guitar);
}
class
return matchingGuitars;
Inven-
tory {
}
Search()}
Inventory.java
jesteś tutaj 
71
Staraj się, by fragmenty aplikacji można było wielokrotnie używać
Zagadka projektowa
Sama wiedza, że w aplikacji Ryśka coś szwankuje, to zdecydowanie za mało. Nie wystarczy także świadomość, że konieczne jest ponowne zastosowanie hermetyzacji. Teraz musisz wymyślić, jak należy poprawić tę aplikację, by łatwiej można było wielokrotnie stosować jej fragmenty oraz by jej rozszerzanie nie przysparzało tylu problemów.
Problem:
Dodanie nowej właściwości do klasy GuitarSpec zmusza nas do wprowadzenia zmian także w kodzie klas Guitar oraz Inventory. Strukturę aplikacji należy zmienić w taki sposób, by dodawanie nowych właściwości do klasy GuitarSpec nie powodowało konieczności
modyfikacji innych klas.
Twoje zadanie:
1 Dodaj właściwość numStrings oraz metodę getNumStrings() do klasy GuitarSpec.
2 Zmodyfikuj kod klasy Guitar w taki sposób, by właściwości obiektu GuitarSpec zostały Nie wiesz, co —
usunięte z konstruktora tej klasy.
w tym kontekście
— oznacza
„delegowanie”
3 Zmień metodę search() w klasie Inventory w taki sposób, by porównywanie dwóch
— sprawdź…
obiektów GuitarSpec zostało delegowane do klasy GuitarSpec, a nie było realizowane bezpośrednio w tej metodzie.
4 Zmodyfikuj kod klasy FindGuitarTester, by działała ona poprawnie ze zmienionymi klasami Guitar, GuitarSpec i Inventory, a następnie upewnij się, że wyszukiwanie gitar działa poprawnie.
5 Porównaj odpowiedzi, które podałeś, z naszymi odpowiedziami zamieszczonymi na stronie 74; następnie przygotuj się na kolejny test, który pozwoli Ci przekonać się, czy wreszcie zakończyłeś prace nad aplikacją Ryśka.
Jedyna zmiana, jaką
wprowadzić
będziesz musiał
w tym miejscu,
kodu tworzącego
dotyczy
testową
magazynu
zawartość
i polega
nowego
na zastosowaniu
konstruktora klasy Guitar.
72
Rozdział 1.
Dobrze zaprojektowane aplikacje są super
Nie ma
niemądrych pytań
P.: Napisaliście, że powinienem „delegować”
P.: A niby w jaki sposób to delegowanie ma ułatwiać
porównywanie do klasy GuitarSpec. Co to jest
możliwości wielokrotnego wykonywania kodu?
delegowanie?
O.:
O.: Dzięki delegowaniu każdy obiekt może sam zajmować
O delegowaniu mówimy w sytuacji, gdy obiekt, który musi
się porównywaniem z innymi obiektami (lub wykonywaniem
wykonać pewną czynność, zamiast wykonać ją samemu, prosi o jej
jakiejkolwiek innej operacji). To z kolei oznacza, że obiekty mogą
wykonanie (w całości lub częściowo) inny obiekt.
być bardziej niezależne albo luźniej powiązane. Takie luźniej
A zatem, w swojej zagadce projektowej nie chcesz, by metoda
powiązane obiekty łatwiej jest zastosować w innej aplikacji, gdyż
search() klasy Inventory porównywała dwie specyfikacje
nie są one ściśle uzależnione od kodu innych obiektów.
GuitarSpec bezpośrednio w swoim kodzie. Zamiast tego chcesz,
by poprosiła obiekt GuitarSpec o określenie, czy specyfikacje
P.:
te odpowiadają sobie. A zatem metoda search() deleguje
Jeszcze raz — co oznacza „luźne powiązanie”?
porównanie do obiektu GuitarSpec.
O.:
P.:
Luźne powiązanie oznacza, że każdy z obiektów używanych
A dlaczego używamy takiego rozwiązania?
w aplikacji wykonuje tylko i wyłączenie swoje zadania. A zatem
cała funkcjonalność aplikacji jest rozdzielona i zaimplementowana
O.:
w dobrze zdefiniowanych obiektach, z których każdy w doskonały
Delegowanie ułatwia wielokrotne wykorzystywanie kodu
sposób realizuje przypisane mu zadania.
aplikacji. Oprócz tego pozwala ono, by każdy obiekt koncentrował
się wyłącznie na swoich możliwościach funkcjonalnych i chroni
przed umieszczaniem zachowań związanych z jednym obiektem
P.: A dlaczego to jest dobre rozwiązanie?
w różnych miejscach kodu aplikacji.
Jednym z najczęściej spotykanych przykładów delegowania
O.:
w języku Java jest metoda equals(). Metoda ta nie stara
Aplikacje tworzone przez luźno powiązane obiekty zazwyczaj
się samodzielnie sprawdzać, czy dwa obiekty są sobie równe,
są bardziej elastyczne i łatwiej można wprowadzać w nich
lecz zamiast tego wywołuje metodę equals() jednego
modyfikacje. Ponieważ poszczególne obiekty nie są zwykle w żaden
z porównywanych obiektów i przekazuje w jej wywołaniu drugi
sposób zależne od innych obiektów, zatem możemy zmienić
obiekt. Następnie pobiera jedynie wartość true lub false zwróconą
zachowanie jednego z obiektów bez konieczności wprowadzania
przez wywołanie metody equals().
modyfikacji w innych. Dzięki temu dodawanie nowych właściwości
lub możliwości funkcjonalnych staje się znacznie prostsze.
Kącik naukowy
delegowanie — proces polegający na tym, iż jeden
obiekt zleca wykonanie pewnej operacji innemu, który
wykonuje ją w imieniu pierwszego obiektu.
jesteś tutaj  73
Jeszcze więcej hermetyzacji
Zagadka projektowa — Rozwiązanie
Sama wiedza, że w aplikacji Ryśka coś szwankuje, to zdecydowanie za mało. Nie wystarczy także świadomość, że konieczne jest ponowne zastosowanie hermetyzacji. Teraz musisz wymyślić, jak należy poprawić tę aplikację, by łatwiej można było wielokrotnie stosować jej fragmenty oraz by jej rozszerzanie nie przysparzało tylu problemów.
Problem:
Dodanie nowej właściwości do klasy GuitarSpec zmusza nas do wprowadzenia zmian także w kodzie klas Guitar oraz Inventory. Strukturę aplikacji należy zmienić w taki sposób, by dodawanie nowych właściwości do klasy GuitarSpec nie powodowało konieczności modyfikacji innych klas.
Twoje zadanie:
1 Dodaj właściwość numStrings oraz metodę getNumStrings() do klasy GuitarSpec.
public class GuitarSpec {
Nie zapomnij zmodyfikować
// inne właściwości
konstruktora klasy
GuitarSpec.
private int numStrings;
To było
public GuitarSpec(Builder builder, String model, Type type,
naprawdę
łatwe…
int numStrings, Wood backWood, Wood topWood) {
this.builder = builder;
this.model = model;
this.type = type;
this.numStrings = numStrings;
this.backWood = backWood;
this.topWood = topWood;
}
// inne metody
Wątki
Powered by wordpress | Theme: simpletex | © Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.