sobota, 27 października 2012

co się dzieje, gdy deklaracje są podobne...

what's the problem?

Czasami zdarza nam się zauważyć w kodzie metody, które posiadają takie same deklaracje. Jest to nieuniknione, dziesiątki, setki i więcej tysięcy linii kodu sprawia, że niekiedy "powtórzenia" tego typu się zdarzają.
Dlaczego "powtórzenia" w cudzysłowie? Ponieważ nie jest to wynik duplikacji logiki, a jedynie użycia języka w celu opisania danej funkcjonalności. Tylko czy rzeczywiście nie jest?

keep digging...

Mimo tego, że we wstępie napisałem, że taka deklaracja wynika jedynie z przypadku, to czy jest tak w rzeczywistości?
Czy jeżeli metody posiadają taką samą nazwę i typ zwracany (bądź jego brak), to czy nie możemy przypuszczać, że w logice również istnieje jakieś podobieństwo? W końcu programowanie obiektowe ma na celu odwzorowanie rzeczywistości, a w prawdziwym świecie czynności, które określamy w ten sam sposób również mają jakąś część wspólną np. o sobie, samochodzie, samolocie itp. mogę powiedzieć, że się poruszamy i choć robimy to na różne sposoby, to cel jest ten sam - dotrzeć do wybranego miejsca.

No dobrze, może i rzeczywiście logicznie wcale nie są całkowicie rozłączne, ale cóż z tego skoro są używane w różnych miejscach, w miejscach, w których wiadomo, że używany obiekt jest instancją konkretnej klasy, więc na cóż by mi się interfejs przydał?

To kopmy dalej:) Skoro istnieje podobieństwo w logice, a deklaracje są identyczne, to czy jest szansa na to, aby miejsca użycia (kod w tych miejscach) również był podobny? Jest, i szczerze mówiąc, wydaje mi się, że nawet spora:) O procesie wyłapywania takich podobieństw i wyciągania ich wyżej pisałem już tutaj, więc ten etap pominę w tym wpisie.

what is the conclusion?

Nie tylko zauważone podobieństwa w kodzie mogą być podstawą do tworzenia rozwiązań niezależnych od konkretnych klas, a interfejsów. Czasami wystarczy deklaracja. Nazwy metod mogą nawet odrobinę się różnić, a to dlatego, że opisujemy je językiem, którym się porozumiewamy na co dzień, a to sprawia, że do wyrażenia jednej czynności możemy wykorzystać wiele słów.
Warto jednak zwracać uwagę na takie podobieństwa ponieważ niekiedy powtórzenie nie oznacza takiego samego kodu (tą samą funkcjonalność można przecież zrealizować na wiele sposobów), a "jedynie" podobne/takie same działanie.

Dobrze jest takie podobieństwa wychwytywać już na etapie projektowania, ponieważ dzięki temu zaoszczędzimy trochę czasu, który w innym wypadku będziemy musieli "stracić" podczas refaktoryzacji.