{"id":34855,"date":"2019-10-31T22:00:51","date_gmt":"2019-10-31T19:00:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/10-printsipov-obektno-orientirovannogo-programmirovaniya-o-kotoryh-dolzhen-znat-kazhdyj-razrabotchik\/"},"modified":"2019-10-31T22:00:51","modified_gmt":"2019-10-31T19:00:51","slug":"10-printsipov-obektno-orientirovannogo-programmirovaniya-o-kotoryh-dolzhen-znat-kazhdyj-razrabotchik","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/news\/10-printsipov-obektno-orientirovannogo-programmirovaniya-o-kotoryh-dolzhen-znat-kazhdyj-razrabotchik","title":{"rendered":"10 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, kter\u00e9 by m\u011bl zn\u00e1t ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"10 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, kter\u00e9 by m\u011bl zn\u00e1t ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159\" src=\"\/wp-content\/uploads\/2019\/06\/129b610bc2576f8d753dfa72395f89f6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n\u010casto se setk\u00e1v\u00e1m s v\u00fdvoj\u00e1\u0159i, kte\u0159\u00ed nesly\u0161eli o principech SOLID (my <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillbox\/blog\/442928\/\">jsme o nich podrobn\u011b psali zde<\/a><\/noindex>. \u2014 pozn. red.) nebo o objektov\u011b orientovan\u00e9m programov\u00e1n\u00ed (OOP), nebo sly\u0161eli, ale nepou\u017e\u00edvaj\u00ed je v praxi. V tomto \u010dl\u00e1nku jsou pops\u00e1ny v\u00fdhody OOP princip\u016f, kter\u00e9 pom\u00e1haj\u00ed v\u00fdvoj\u00e1\u0159i v jeho ka\u017edodenn\u00ed pr\u00e1ci. N\u011bkter\u00e9 z nich jsou dob\u0159e zn\u00e1m\u00e9, jin\u00e9 m\u00e9n\u011b, tak\u017ee \u010dl\u00e1nek bude u\u017eite\u010dn\u00fd jak nov\u00e1\u010dk\u016fm, tak zku\u0161en\u00fdm program\u00e1tor\u016fm.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>P\u0159ipom\u00edn\u00e1me:<\/b> <i>pro v\u0161echny \u010dten\u00e1\u0159e \u201eHabra\u201c \u2014 sleva 10 000 korun p\u0159i p\u0159ihl\u00e1\u0161en\u00ed na jak\u00fdkoli kurz Skillbox s promo k\u00f3dem \u201eHabr\u201c.<\/i><\/p>\n<p><b>Skillbox doporu\u010duje:<\/b> Vzd\u011bl\u00e1vac\u00ed online kurz <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/java\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=JAVDEV&amp;utm_content=articles&amp;utm_term=10oop\">\u201eJava v\u00fdvoj\u00e1\u0159\u201c<\/a><\/noindex>.<\/p><\/blockquote>\n<p><\/p>\n<h3>DRY (Don\u2019t Repeat Yourself)<\/h3>\n<p>\nPom\u011brn\u011b jednoduch\u00fd princip, jeho\u017e podstata je jasn\u00e1 z n\u00e1zvu: \u201eNepo\u0159\u00e1dej se\u201c. Pro program\u00e1tora to znamen\u00e1 pot\u0159ebu vzd\u00e1lit se od duplicitn\u00edho k\u00f3du a tak\u00e9 mo\u017enost vyu\u017e\u00edvat v pr\u00e1ci abstrakci.<\/p>\n<p>Pokud v k\u00f3du existuj\u00ed dv\u011b opakuj\u00edc\u00ed se \u010d\u00e1sti, m\u011bly by b\u00fdt slou\u010deny do jedn\u00e9 metody. Pokud je pevn\u011b stanoven\u00e1 hodnota pou\u017e\u00edv\u00e1na v\u00edce ne\u017e jednou, m\u011bla by b\u00fdt p\u0159evedena na ve\u0159ejnou konstantu.<\/p>\n<p>To je pot\u0159eba, aby se zjednodu\u0161il k\u00f3d a usnadnila jeho \u00fadr\u017eba, co\u017e je hlavn\u00edm \u00fakolem OOP. Nen\u00ed dobr\u00e9 ani p\u0159eh\u00e1n\u011bt se slu\u010dov\u00e1n\u00edm, proto\u017ee stejn\u00fd k\u00f3d neprojde kontrolou jak s OrderId, tak se SSN.<\/p>\n<h3>Inkapsulace zm\u011bn<\/h3>\n<p>\nSoftwarov\u00e9 produkty v\u011bt\u0161iny spole\u010dnost\u00ed neust\u00e1le vyv\u00edjej\u00ed. To znamen\u00e1, \u017ee do k\u00f3du je t\u0159eba zav\u00e1d\u011bt zm\u011bny a udr\u017eovat ho. Usnadnit si \u017eivot lze pomoc\u00ed inkapsulace. To umo\u017en\u00ed efektivn\u011bji testovat a udr\u017eovat st\u00e1vaj\u00edc\u00ed z\u00e1kladnu k\u00f3du. <noindex><a rel=\"nofollow\" href=\"http:\/\/javarevisited.blogspot.com\/2011\/12\/factory-design-pattern-java-example.html\">Zde je jeden z p\u0159\u00edklad\u016f<\/a><\/noindex>.<\/p>\n<p>Pokud programujete v Jav\u011b, pak <noindex><a rel=\"nofollow\" href=\"http:\/\/javarevisited.blogspot.sg\/2012\/03\/private-in-java-why-should-you-always.html#axzz559dyoLSA\">p\u0159i\u0159azujte defaultn\u011b private metod\u00e1m a prom\u011bnn\u00fdm<\/a><\/noindex>.<\/p>\n<h3>Princip otev\u0159enosti\/zav\u0159enosti<\/h3>\n<p>\nTento princip lze snadno zapamatovat, pokud si p\u0159e\u010dtete n\u00e1sleduj\u00edc\u00ed tvrzen\u00ed: \u201eSoftwarov\u00e9 entity (t\u0159\u00eddy, moduly, funkce atd.) by m\u011bly b\u00fdt otev\u0159en\u00e9 pro roz\u0161i\u0159ov\u00e1n\u00ed, ale uzav\u0159en\u00e9 pro zm\u011bny\u201c. V praxi to znamen\u00e1, \u017ee mohou umo\u017enit m\u011bnit sv\u00e9 chov\u00e1n\u00ed bez \u00fapravy zdrojov\u00e9ho k\u00f3du.<\/p>\n<p>Princip je d\u016fle\u017eit\u00fd, kdy\u017e \u00fapravy ve zdrojov\u00e9m k\u00f3du vy\u017eaduj\u00ed proveden\u00ed jeho revize, modulov\u00e9ho testov\u00e1n\u00ed a dal\u0161\u00edch procedur. K\u00f3d, kter\u00fd se pod\u0159izuje principu otev\u0159enosti\/zav\u0159enosti, se p\u0159i roz\u0161\u00ed\u0159en\u00ed nem\u011bn\u00ed, a proto s n\u00edm je mnohem m\u00e9n\u011b probl\u00e9m\u016f.<\/p>\n<p>Zde je p\u0159\u00edklad k\u00f3du, kter\u00fd tento princip poru\u0161uje.<\/p>\n<p><img decoding=\"async\" alt=\"10 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, kter\u00e9 by m\u011bl zn\u00e1t ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159\" src=\"\/wp-content\/uploads\/2019\/06\/85d53972bef28713087acc428deebc3a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nPokud bude pot\u0159eba n\u011bco zm\u011bnit, zabere to spoustu \u010dasu, jeliko\u017e je t\u0159eba zm\u011bnit v\u0161echny \u010d\u00e1sti k\u00f3du, kter\u00e9 souvisej\u00ed s po\u017eadovan\u00fdm fragmentem.<\/p>\n<p>Mimochodem, otev\u0159enost-zav\u0159enost je jedn\u00edm z princip\u016f SOLID.<\/p>\n<h3>Princip jedin\u00e9 odpov\u011bdnosti (SRP)<\/h3>\n<p>\nDal\u0161\u00ed princip ze sady SOLID. \u0158\u00edk\u00e1, \u017ee \"existuje pouze jeden d\u016fvod, pro\u010d by se t\u0159\u00edda m\u011bla m\u011bnit\". T\u0159\u00edda \u0159e\u0161\u00ed pouze jeden \u00fakol. M\u016f\u017ee m\u00edt n\u011bkolik metod, ale ka\u017ed\u00e1 z nich se pou\u017e\u00edv\u00e1 pouze k vy\u0159e\u0161en\u00ed spole\u010dn\u00e9ho \u00fakolu. V\u0161echny metody a vlastnosti by m\u011bly slou\u017eit pouze tomu. <\/p>\n<p><img decoding=\"async\" alt=\"10 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, kter\u00e9 by m\u011bl zn\u00e1t ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159\" src=\"\/wp-content\/uploads\/2019\/06\/7332d424f27e091192cbbb8dacb13d01.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nHodnota tohoto principu spo\u010d\u00edv\u00e1 v tom, \u017ee oslabuje vazbu mezi jednotliv\u00fdmi komponenty softwaru a k\u00f3dem. Pokud p\u0159id\u00e1te v\u00edce ne\u017e jednu funk\u010dnost do t\u0159\u00eddy, zav\u00e1d\u00ed to vazbu mezi dv\u011bma funkcemi. Pokud tedy zm\u011bn\u00edte jednu z nich, existuje velk\u00e1 \u0161ance, \u017ee zkaz\u00edte druhou, kter\u00e1 je s prvn\u00ed spojena. To znamen\u00e1 zv\u00fd\u0161en\u00ed po\u010dtu testovac\u00edch cykl\u016f, abyste p\u0159edem odhalili v\u0161echny probl\u00e9my.<\/p>\n<h3>Princip inverze z\u00e1vislost\u00ed (DIP)<\/h3>\n<p>\n<img decoding=\"async\" alt=\"10 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, kter\u00e9 by m\u011bl zn\u00e1t ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159\" src=\"\/wp-content\/uploads\/2019\/06\/eb1e09cceee028f88fa83fd8d30a189a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nV\u00fd\u0161e byl uveden p\u0159\u00edklad k\u00f3du, kde AppManager z\u00e1vis\u00ed na EventLogWriter, kter\u00fd je zase \u00fazce spojen s AppManagerem. Pokud pot\u0159ebujete jin\u00fd zp\u016fsob, jak zobrazit ozn\u00e1men\u00ed, a\u0165 u\u017e je to push, SMS nebo email, je t\u0159eba zm\u011bnit t\u0159\u00eddu AppManager.<\/p>\n<p>Probl\u00e9m m\u016f\u017ee b\u00fdt vy\u0159e\u0161en pomoc\u00ed DIP. M\u00edsto AppManageru \u017e\u00e1d\u00e1me EventLogWriter, kter\u00fd bude zaveden pomoc\u00ed frameworku.<\/p>\n<p>DIP umo\u017e\u0148uje bez probl\u00e9m\u016f m\u011bnit jednotliv\u00e9 moduly jin\u00fdmi, zm\u011bnou modulu z\u00e1vislosti. To umo\u017e\u0148uje m\u011bnit jeden modul, ani\u017e by to ovlivnilo ostatn\u00ed.<\/p>\n<h3>Kompozice m\u00edsto d\u011bdi\u010dnosti<\/h3>\n<p>\n<img decoding=\"async\" alt=\"10 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, kter\u00e9 by m\u011bl zn\u00e1t ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159\" src=\"\/wp-content\/uploads\/2019\/06\/b97ebf8c423f415298dc10ae4e14fe89.jpg\" style=\"display:block;margin: 0 auto;\" \/>Hlavn\u00edmi zp\u016fsoby op\u011btovn\u00e9ho vyu\u017eit\u00ed k\u00f3du jsou dva \u2014 d\u011bdi\u010dnost a kompozice, p\u0159i\u010dem\u017e ka\u017ed\u00fd m\u00e1 sv\u00e9 v\u00fdhody a nev\u00fdhody. Obvykle se d\u00e1v\u00e1 p\u0159ednost druh\u00e9mu, proto\u017ee je flexibiln\u011bj\u0161\u00ed.<\/p>\n<p>Kompozice umo\u017e\u0148uje m\u011bnit chov\u00e1n\u00ed t\u0159\u00eddy za b\u011bhu nastaven\u00edm jej\u00edch vlastnost\u00ed. P\u0159i implementaci rozhran\u00ed se pou\u017e\u00edv\u00e1 polymorfismus, kter\u00fd umo\u017e\u0148uje flexibiln\u011bj\u0161\u00ed implementaci.<\/p>\n<p>Dokonce i \"Effective Java\" od Joshuy Blocha doporu\u010duje d\u00e1vat p\u0159ednost kompozici p\u0159ed d\u011bdi\u010dnost\u00ed.<\/p>\n<h3>Princip substituce Barbary Liskov (LSP)<\/h3>\n<p>\nDal\u0161\u00ed princip z n\u00e1stroje SOLID. T\u00fdk\u00e1 se toho, \u017ee podtypy by m\u011bly b\u00fdt zam\u011bniteln\u00e9 za nadtyp. To znamen\u00e1, \u017ee metody a funkce, kter\u00e9 pracuj\u00ed s nadt\u0159\u00eddou, by m\u011bly b\u00fdt schopny bez probl\u00e9m\u016f fungovat i s jej\u00edmi podt\u0159\u00eddami.<\/p>\n<p>LSP souvis\u00ed jak s principem jedin\u00e9 odpov\u011bdnosti, tak s principem rozd\u011blen\u00ed odpov\u011bdnosti. Pokud t\u0159\u00edda poskytuje v\u00edce funkcionality ne\u017e podt\u0159\u00edda, posledn\u00ed nebude podporovat n\u011bkter\u00e9 funkce, co\u017e poru\u0161uje tento princip.<\/p>\n<p>Zde je \u00fasek k\u00f3du, kter\u00fd poru\u0161uje LSP.<\/p>\n<p><img decoding=\"async\" alt=\"10 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, kter\u00e9 by m\u011bl zn\u00e1t ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159\" src=\"\/wp-content\/uploads\/2019\/06\/8c412a2cb4d1f7e53f69afc4ef46a967.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nMetoda area(Rectangle r) po\u010d\u00edt\u00e1 plochu obd\u00e9ln\u00edku. Program spadne po vykon\u00e1n\u00ed t\u0159\u00eddy Square, proto\u017ee Square zde nen\u00ed obd\u00e9ln\u00edk. Podle principu LSP by funkce, kter\u00e9 pou\u017e\u00edvaj\u00ed odkazy na z\u00e1kladn\u00ed t\u0159\u00eddy, m\u011bly b\u00fdt schopny pou\u017e\u00edvat objekty odvozen\u00fdch t\u0159\u00edd bez dal\u0161\u00edch instrukc\u00ed.<\/p>\n<p>Tento princip, kter\u00fd je specifick\u00fdm definov\u00e1n\u00edm podtypu, byl navr\u017een Barbarou Liskov v roce 1987 na konferenci v hlavn\u00edm refer\u00e1tu s n\u00e1zvem \u201eAbstrakce dat a hierarchie\u201c \u2014 odtud jeho n\u00e1zev.<\/p>\n<h3>Princip rozd\u011blen\u00ed rozhran\u00ed (ISP)<\/h3>\n<p>\nDal\u0161\u00ed princip SOLID. Podle n\u011bj by nem\u011blo b\u00fdt implementov\u00e1no rozhran\u00ed, kter\u00e9 nen\u00ed pou\u017e\u00edv\u00e1no. Dodr\u017eov\u00e1n\u00ed tohoto principu pom\u00e1h\u00e1 syst\u00e9mu z\u016fstat flexibiln\u00edm a vhodn\u00fdm pro refaktoring p\u0159i zm\u011bn\u00e1ch v logice.<\/p>\n<p>Nej\u010dast\u011bji se tato situace vyskytuje, kdy\u017e rozhran\u00ed obsahuje n\u011bkolik funkcionalit, a p\u0159itom klient pot\u0159ebuje pouze jednu z nich.<\/p>\n<p>Proto\u017ee naps\u00e1n\u00ed rozhran\u00ed je slo\u017eit\u00fd \u00fakol, po dokon\u010den\u00ed pr\u00e1ce bude probl\u00e9m jej zm\u011bnit, ani\u017e by se n\u011bco poru\u0161ilo.<\/p>\n<p>V\u00fdhodou principu ISP v Jav\u011b je, \u017ee nejprve je t\u0159eba implementovat v\u0161echny metody, a a\u017e potom mohou b\u00fdt vyu\u017eity t\u0159\u00eddami. Tento princip tedy umo\u017e\u0148uje sn\u00ed\u017eit po\u010det metod.<\/p>\n<p><img decoding=\"async\" alt=\"10 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, kter\u00e9 by m\u011bl zn\u00e1t ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159\" src=\"\/wp-content\/uploads\/2019\/06\/ea3e314e9f7766e8c1d3ce46d0dcdc09.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Programov\u00e1n\u00ed pro rozhran\u00ed, nikoli implementaci<\/h3>\n<p>\nZ n\u00e1zvu je to jasn\u00e9. Uplatn\u011bn\u00ed tohoto principu vede k vytvo\u0159en\u00ed flexibiln\u00edho k\u00f3du, kter\u00fd dok\u00e1\u017ee pracovat s jakoukoli novou implementac\u00ed rozhran\u00ed.<\/p>\n<p>M\u011bl by b\u00fdt pou\u017eit typ rozhran\u00ed pro prom\u011bnn\u00e9, n\u00e1vratov\u00e9 typy nebo typ argumentu metody. P\u0159\u00edklad - pou\u017eit\u00ed SuperClass m\u00edsto SubClass.<\/p>\n<p>To znamen\u00e1:<\/p>\n<p><i>List numbers = getNumbers();<\/i><\/p>\n<p>A ne:<\/p>\n<p><i>ArrayList numbers = getNumbers();<\/i><\/p>\n<p>Tady je praktick\u00e1 implementace toho, co bylo v\u00fd\u0161e \u0159e\u010deno.<\/p>\n<p><img decoding=\"async\" alt=\"10 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, kter\u00e9 by m\u011bl zn\u00e1t ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159\" src=\"\/wp-content\/uploads\/2019\/06\/8bbcd8342a9870bc28272f0550a8664c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Princip delen\u00ed<\/h3>\n<p>\nB\u011b\u017en\u00fd p\u0159\u00edklad \u2014 metody equals() a hashCode() v Jav\u011b. Kdy\u017e je pot\u0159eba porovnat dva objekty, tato akce se deleguje p\u0159\u00edslu\u0161n\u00e9 t\u0159\u00edd\u011b m\u00edsto klientsk\u00e9.<\/p>\n<p>V\u00fdhodou tohoto principu je absence duplicity k\u00f3du a relativn\u011b snadn\u00e1 zm\u011bna chov\u00e1n\u00ed. Je tak\u00e9 aplikovateln\u00fd na delegaci ud\u00e1lost\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"10 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, kter\u00e9 by m\u011bl zn\u00e1t ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159\" src=\"\/wp-content\/uploads\/2019\/06\/c9ca40cb27e288e5e31ebfba76fa36a5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nV\u0161echny tyto principy umo\u017e\u0148uj\u00ed ps\u00e1t flexibiln\u011bj\u0161\u00ed, kr\u00e1sn\u011bj\u0161\u00ed a spolehliv\u011bj\u0161\u00ed k\u00f3d s vysokou koh\u00e9znost\u00ed a n\u00edzkou vazbou. Samoz\u0159ejm\u011b, teorie je dobr\u00e1, ale aby se v\u00fdvoj\u00e1\u0159 skute\u010dn\u011b nau\u010dil pou\u017e\u00edvat nabyt\u00e9 znalosti, je pot\u0159eba praxe. Dal\u0161\u00edm krokem po osvojov\u00e1n\u00ed princip\u016f OOP m\u016f\u017ee b\u00fdt studium n\u00e1vrhov\u00fdch vzor\u016f pro \u0159e\u0161en\u00ed b\u011b\u017en\u00fdch probl\u00e9m\u016f v\u00fdvoje softwaru.<\/p>\n<blockquote><p><b>Skillbox doporu\u010duje:<\/b><\/p>\n<ul>\n<li>Praktick\u00fd kurz <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/agima\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=AGIMA&amp;utm_content=articles&amp;utm_term=10oop\">\"Mobiln\u00ed v\u00fdvoj\u00e1\u0159 PRO\"<\/a><\/noindex>.<\/li>\n<li>Aplikovan\u00fd online kurz <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/python-data\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=PTNANA&amp;utm_content=articles&amp;utm_term=10oop\">\u201eDatov\u00fd analytik v Pythonu\u201c<\/a><\/noindex>.<\/li>\n<li>Dvouro\u010dn\u00ed praktick\u00fd kurz <noindex><a rel=\"nofollow\" href=\"https:\/\/iamwebdev.skillbox.ru\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=WEBDEVPRO&amp;utm_content=articles&amp;utm_term=10oop\">\u201eJsem WEB v\u00fdvoj\u00e1\u0159 PRO\u201c<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillbox\/blog\/454314\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u043d\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u0445 SOLID (\u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043e \u043d\u0438\u0445 \u0437\u0434\u0435\u0441\u044c. \u2014 \u041f\u0435\u0440.) \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u041e\u041e\u041f), \u0438\u043b\u0438 \u0441\u043b\u044b\u0448\u0430\u043b\u0438, \u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0438\u0445 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u041e\u041e\u041f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0432 \u0435\u0433\u043e \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u043c \u0442\u0440\u0443\u0434\u0435. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b, \u0434\u0440\u0443\u0433\u0438\u0435 \u2014 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c, \u0442\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26244,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-34855","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/news\/10-printsipov-obektno-orientirovannogo-programmirovaniya-o-kotoryh-dolzhen-znat-kazhdyj-razrabotchik\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd4710 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/news\/10-printsipov-obektno-orientirovannogo-programmirovaniya-o-kotoryh-dolzhen-znat-kazhdyj-razrabotchik\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:00:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:00:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd4710 princip\u016f objektov\u011b orientovan\u00e9ho programov\u00e1n\u00ed, o kter\u00fdch by m\u011bl v\u011bd\u011bt ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/news\/10-printsipov-obektno-orientirovannogo-programmirovaniya-o-kotoryh-dolzhen-znat-kazhdyj-razrabotchik","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd4710 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a | ProHoster","og:url":"https:\/\/prohoster.info\/cs\/blog\/news\/10-printsipov-obektno-orientirovannogo-programmirovaniya-o-kotoryh-dolzhen-znat-kazhdyj-razrabotchik","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:00:51+00:00","article:modified_time":"2019-10-31T19:00:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34855","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 20:51:32","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:14:05","updated":"2026-01-21 20:51:32","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/34855","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=34855"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/34855\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/26244"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=34855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=34855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=34855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}