2009-02-20 8 views
5

Przeczytałem wszystkie książki o tym, dlaczego stworzyć klasę i rzeczy typu "szukaj rzeczowników w swoich wymaganiach", ale to nie wydaje się być wystarczające. Moje zajęcia wydają mi się niechlujne. Chciałbym wiedzieć, czy istnieją jakieś dane lub coś, co mogę porównać z moimi zajęciami i zobaczyć, czy są one dobrze zaprojektowane. Jeśli nie, to kto jest najbardziej szanowanym guru OO, skąd mogę uzyskać odpowiednie wskazówki dotyczące projektowania klas?Opisywanie właściwych klas

+0

+1, chciałbym również poznać – krebstar

Odpowiedz

2

jeśli jesteś zaznajomiony z projektowania baz danych, a zwłaszcza pojęcie normalizacji, to odpowiedź jest prosta: klasa data-centric powinien reprezentować podmiot w trzeciej postaci normalnej

jeśli to nie pomaga, spróbuj tego zamiast:

  • klasa to zbiór elementów danych i sposoby, które działają na nich
  • klasa powinna mieć swoistą odpowiedzialność, to znaczy powinien on reprezentować jedną cechę modelu; jeśli reprezentuje więcej niż jedną rzecz, wówczas powinna to być więcej niż jedna klasa.
  • wszystkie elementy danych w klasie powinny być logicznie powiązane/powiązane ze sobą; jeśli nie są one, podzielić ją na dwie lub więcej klas
  • wszystkich metod w klasie powinna działać wyłącznie na ich parametrów wejściowych i elementów danych klasy - patrz na Law of Demeter

to o ile mogę iść z ogólną abstrakcyjną radą (bez pisania długiego eseju); możesz opublikować jedną ze swoich klas do krytyki, jeśli potrzebujesz konkretnej porady.

+0

@ [Celebrus]: dziękuję –

0

Uważam, że projektowanie obiektów jest tak samo sztuką, jak nauką. Potrzeba czasu i praktyki, aby zrozumieć, jak zaprojektować czyste eleganckie klasy. Być może, jeśli możesz podać przykład prostej klasy, którą zaprojektowałeś, że nie jesteś zadowolony z tego, że użytkownicy SO mogą krytykować i dawać wskazówki. Nie jestem pewien, czy istnieją ogólne odpowiedzi poza tym, co już przeczytałeś w tekstach.

+0

również, jakiego języka używasz? chociaż OOD jest neutralny językowo, używanie specyficznych dla języka funkcji w klasie może uczynić go czystszym. – Jason

0

Najbardziej szanowanym guru OO, którego znam osobiście, jest StackOverflow. Połóż tutaj swoje nazwy klasowe i sądzę, że dostaniesz sporą liczbę recenzji.

+0

Dobrze czy bezbożnie? – orbfish

0

Klasy są zazwyczaj używane do modelowania koncepcji dziedziny problemowej. Gdy masz już dobrze zdefiniowany problem (inaczej zestaw przypadków użycia), będziesz w stanie zidentyfikować wszystkich uczestników. Podzbiór uczestników będzie nieodłącznym elementem systemu, który projektujesz. Zacznij od jednego dużego czarnego pudełka jako systemu. Rozdaj go, kiedy i kiedy będziesz miał więcej informacji. Kiedy masz poziom, na którym nie można ich już podzielić (na pojęcia w domenie twojego problemu), zaczynasz zdobywać klasy.

Ale jest to subiektywny pogląd nie-guru. Proponuję szczyptę soli do menu.

4

Tworzenie klas, które zaczynają się od czyszczenia, a następnie stają się brudne, jest zasadniczą częścią OO, czyli wtedy, gdy odnawiasz. Wielu programistów próbuje przejść do idealnego projektu klasowego od samego początku, z mojego doświadczenia to po prostu niemożliwe, zamiast tego potykasz się, rozwiązujesz problem, a potem refactor. Możesz zbierać, klasy bazowe i interfejsy w miarę pojawiania się projektu.

+0

jeśli nie wiesz, jak zaprojektować dobrą klasę na pierwszym miejscu, jest szansa, że ​​nie wiesz, jak zmienić klasę, aby była lepsza ... ;-) –

+0

To prawda, ale jego punkt jest również prawdziwy i brakowało go gdzie indziej. – orbfish

0

Dane? Nie dlatego, że byś im zaufał.

Czy Twoje zajęcia sprawiają, że program działa i utrzymuje go w stanie umożliwiającym konserwację za pomocą wielu wersji?

Jeśli tak, robisz dobrze.

Jeśli nie, zadaj sobie pytanie, dlaczego nie, a następnie zmień to, co nie działa.

2

Postaraj się skupić na zachowaniu zamiast na strukturze. Obiekty są "żywymi" istotami o zachowaniu i odpowiedzialności. Mówisz im, żeby robili różne rzeczy. Spójrz na podejście CRC-card, które pomoże Ci w ten sposób modelować.

Powiązane problemy