czwartek, września 10

S.O.L.I.D

Witam,

serdecznie wszystkich po długiej przerwie, postaram się dzisiaj przedstawić bardzo skrótowo zagadnienie S.O.L.I.D, oraz zamieszczę klika linków do zagadnienia;


S.O.L.I.D. Class Design Principles

Zagadnienie zostało przedstawione przez Robert C. Martin w książce „Applying Principles and Patterns”


Single Responsibility Principle (SRP)
Klasa powinna mieć tylko jeden powód do zmiany stanu. Jeżeli klasa zmienia stan z przyczyn biznesowych, to zmiany schematu bazy danych, GUI, formatu raportu, oraz inne zmiany nie powinny wpłynąć na klasę.

http://davidhayden.com/blog/dave/archive/2005/05/29/1066.aspx
http://c2.com/cgi/wiki?SingleResponsibilityPrinciple
Head First Design patterns page 185, 336, 339, 367
http://msdn.microsoft.com/en-us/magazine/cc546578.aspx
http://codebetter.com/blogs/david_laribee/archive/2008/09/09/why-solid-gimme-an-s.aspx


Open/Closed Principle (OCP)
Encje oprogramowania (klasy, moduły, funkcje, etc.) powinny być otwarte na rozszerzenia, ale zamknięte na modyfikacje.

http://davidhayden.com/blog/dave/archive/2005/06/04/1096.aspx
http://en.wikipedia.org/wiki/Open/closed_principle
Head First Design patterns page 86-87, 407
http://c2.com/cgi/wiki?OpenClosedPrinciple
http://codebetter.com/blogs/david_laribee/archive/2008/09/11/why-solid-gimme-an-quot-o-quot.aspx


Liskov substitution principle (LSP)
Podtyp powinien być substytutem typu bazowego. Jeżeli klasa A dziedziczy z klasy B, to tam gdzie możemy użyć klasy A, to też możemy użyć klasy B11

http://davidhayden.com/blog/dave/archive/2005/06/10/1226.aspx
http://c2.com/cgi/wiki?LiskovSubstitutionPrinciple
http://en.wikipedia.org/wiki/Liskov_substitution_principle
http://javaboutique.internet.com/tutorials/JavaOO/
http://codebetter.com/blogs/david_laribee/archive/2008/09/22/why-solid-gimme-an-l.aspx


Interface Segregation Principle (ISP)
Jedna klasa powinna zależeć od innej, poprzez jak najmniejszy interfejs jeżeli to możliwe.

http://davidhayden.com/blog/dave/archive/2005/06/15/1482.aspx
http://c2.com/cgi/wiki?InterfaceSegregationPrinciple
http://www.google.com/search?q=interface+segration+principle
http://doodleproject.sourceforge.net/articles/2001/interfaceSegregationPrinciple.html


Dependency Inversion Principle (DIP)
Klasa powinna być zależna od interfejsu, ale nie od konkretnej klasy.

http://davidhayden.com/blog/dave/archive/2005/06/10/1261.aspx
http://en.wikipedia.org/wiki/Dependency_inversion_principle
Head First Design patterns page 139-143
http://c2.com/cgi/wiki?DependencyInversionPrinciple

1 komentarz:

  1. Najlepsze wyjaśnienie Single Responsibility jakie znalazlem (made in Poland;) http://koziolekweb.pl/2009/02/26/solidne-programowanie-czesc-1-czyli-monogamia/

    Najlepsza esencja Zasady Podstawienia Liskov: uzywaj dziedziczenia tylko wówczas gdy będziesz korzystał z POLIMORFIZMU. Dziedziczenie NIE SŁUŻY do "wyciagania przed nawias" wspólnych atrybutów - ponieważ pojawia się problem z kruchą klasą bazową. Do "wyciagania przed nawias" służy agregacja/kompozycja.

    OdpowiedzUsuń