{"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\/sv\/blog\/news\/10-printsipov-obektno-orientirovannogo-programmirovaniya-o-kotoryh-dolzhen-znat-kazhdyj-razrabotchik","title":{"rendered":"10 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r veta","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"10 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r veta\" src=\"\/wp-content\/uploads\/2019\/06\/129b610bc2576f8d753dfa72395f89f6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nJag st\u00f6ter ganska ofta p\u00e5 utvecklare som inte har h\u00f6rt talas om SOLID-principerna (vi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillbox\/blog\/442928\/\">ber\u00e4ttade detaljerat om dem h\u00e4r<\/a><\/noindex>. \u2014 Anm.) eller objektorienterad programmering (OOP), eller har h\u00f6rt talas om dem men inte anv\u00e4nder dem i praktiken. I den h\u00e4r artikeln beskrivs f\u00f6rdelarna med OOP-principerna som hj\u00e4lper utvecklare i deras dagliga arbete. Vissa av dem \u00e4r v\u00e4lk\u00e4nda, andra \u00e4r mindre k\u00e4nda, s\u00e5 artikeln kommer att vara anv\u00e4ndbar b\u00e5de f\u00f6r nyb\u00f6rjare och erfarna programmerare.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>P\u00e5minnelse:<\/b> <i>Till alla l\u00e4sare av \"Habr\" \u2014 rabatt p\u00e5 10 000 rubel vid registrering till vilken kurs som helst p\u00e5 Skillbox med rabattkoden \"Habr\".<\/i><\/p>\n<p><b>Skillbox rekommenderar:<\/b> Utbildningskurs online <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\">Java-utvecklare<\/a><\/noindex>.<\/p><\/blockquote>\n<p><\/p>\n<h3>DRY (Don\u2019t Repeat Yourself)<\/h3>\n<p>\nEn ganska enkel princip, vars inneb\u00f6rd framg\u00e5r av namnet: \"Upprepa dig inte\". F\u00f6r en programmerare inneb\u00e4r detta att undvika duplicerad kod samt m\u00f6jligheten att anv\u00e4nda abstraktion i sitt arbete.<\/p>\n<p>Om det finns tv\u00e5 upprepande sektioner i koden, b\u00f6r de sl\u00e5s samman till en metod. Om ett fast v\u00e4rde anv\u00e4nds mer \u00e4n en g\u00e5ng, b\u00f6r det omvandlas till en offentlig konstant.<\/p>\n<p>Detta g\u00f6rs f\u00f6r att f\u00f6renkla koden och g\u00f6ra dess underh\u00e5ll enklare, vilket \u00e4r syftet med OOP. Man b\u00f6r dock inte missbruka sammanslagning, eftersom samma kod inte klarar tester b\u00e5de med OrderId och med SSN.<\/p>\n<h3>Inkapself\u00f6r\u00e4ndringar<\/h3>\n<p>\nProgramvaruprodukterna hos de flesta f\u00f6retag utvecklas st\u00e4ndigt. Det inneb\u00e4r att koden m\u00e5ste \u00e4ndras och st\u00f6djas. Man kan f\u00f6renkla sitt liv genom inkapsling. Detta g\u00f6r det m\u00f6jligt att testa och underh\u00e5lla den befintliga kodbasen mer effektivt. <noindex><a rel=\"nofollow\" href=\"http:\/\/javarevisited.blogspot.com\/2011\/12\/factory-design-pattern-java-example.html\">H\u00e4r \u00e4r ett av exemplen<\/a><\/noindex>.<\/p>\n<p>Om du skriver i Java, ska du <noindex><a rel=\"nofollow\" href=\"http:\/\/javarevisited.blogspot.sg\/2012\/03\/private-in-java-why-should-you-always.html#axzz559dyoLSA\">som standard tilldela private till metoder och variabler<\/a><\/noindex>.<\/p>\n<h3>\u00d6ppen\/st\u00e4ngd princip<\/h3>\n<p>\nDenna princip \u00e4r l\u00e4tt att komma ih\u00e5g genom att l\u00e4sa f\u00f6ljande uttalande: \"Programvaruenheter (klasser, moduler, funktioner etc.) b\u00f6r vara \u00f6ppna f\u00f6r utvidgning men st\u00e4ngda f\u00f6r f\u00f6r\u00e4ndring\". I praktiken inneb\u00e4r detta att de kan till\u00e5ta att deras beteende \u00e4ndras utan att \u00e4ndra k\u00e4llkoden.<\/p>\n<p>Principen \u00e4r viktig n\u00e4r f\u00f6r\u00e4ndringar i k\u00e4llkoden kr\u00e4ver att den granskas, genomg\u00e5r enhetstestning och andra procedurer. Kod som f\u00f6ljer den \u00f6ppna\/st\u00e4ngda principen \u00e4ndras inte vid utvidgning, vilket g\u00f6r att man f\u00e5r f\u00e4rre problem med den.<\/p>\n<p>H\u00e4r \u00e4r ett kodexempel som bryter mot denna princip.<\/p>\n<p><img decoding=\"async\" alt=\"10 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r veta\" src=\"\/wp-content\/uploads\/2019\/06\/85d53972bef28713087acc428deebc3a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nOm det beh\u00f6vs n\u00e5gra \u00e4ndringar i den, kommer det att ta mycket tid eftersom alla kodavsnitt som har kopplingar till det n\u00f6dv\u00e4ndiga fragmentet m\u00e5ste \u00e4ndras.<\/p>\n<p>F\u00f6rresten, \u00f6ppenhet-st\u00e4ngdhet \u00e4r en av principerna i SOLID.<\/p>\n<h3>Principen om enskild ansvarighet (SRP)<\/h3>\n<p>\nEn annan princip fr\u00e5n SOLID-setet. Den s\u00e4ger att \"det finns bara en anledning till att en klass kan \u00e4ndras\". En klass l\u00f6ser bara en uppgift. Den kan ha flera metoder, men var och en av dem anv\u00e4nds endast f\u00f6r att l\u00f6sa den \u00f6vergripande uppgiften. Alla metoder och egenskaper ska endast tj\u00e4na detta syfte. <\/p>\n<p><img decoding=\"async\" alt=\"10 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r veta\" src=\"\/wp-content\/uploads\/2019\/06\/7332d424f27e091192cbbb8dacb13d01.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nV\u00e4rdet av denna princip \u00e4r att den minskar kopplingen mellan enskilda mjukvarukomponenter och koden. Om man l\u00e4gger till mer \u00e4n en funktionalitet i en klass, introducerar det en koppling mellan tv\u00e5 funktioner. S\u00e5ledes, om man \u00e4ndrar en av dem, finns det stor risk att f\u00f6rst\u00f6ra den andra, som \u00e4r kopplad till den f\u00f6rsta. Det inneb\u00e4r en \u00f6kning av testcykler f\u00f6r att uppt\u00e4cka alla problem i f\u00f6rv\u00e4g.<\/p>\n<h3>Principen om beroendeinversion (DIP)<\/h3>\n<p>\n<img decoding=\"async\" alt=\"10 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r veta\" src=\"\/wp-content\/uploads\/2019\/06\/eb1e09cceee028f88fa83fd8d30a189a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nExemplet ovan visar koden d\u00e4r AppManager \u00e4r beroende av EventLogWriter, som i sin tur \u00e4r n\u00e4ra kopplad till AppManager. Om ett annat s\u00e4tt beh\u00f6vs f\u00f6r att visa en avisering, vare sig det \u00e4r en push, SMS eller e-post, m\u00e5ste klassen AppManager \u00e4ndras.<\/p>\n<p>Problemet kan l\u00f6sas med hj\u00e4lp av DIP. Ist\u00e4llet f\u00f6r AppManager, beg\u00e4r vi EventLogWriter, som kommer att introduceras genom ramverket.<\/p>\n<p>DIP g\u00f6r det m\u00f6jligt att problemfritt byta ut enskilda moduler mot andra, genom att \u00e4ndra beroendemodulen. Det g\u00f6r det m\u00f6jligt att \u00e4ndra en modul utan att p\u00e5verka de andra.<\/p>\n<h3>Komposition ist\u00e4llet f\u00f6r arv<\/h3>\n<p>\n<img decoding=\"async\" alt=\"10 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r veta\" src=\"\/wp-content\/uploads\/2019\/06\/b97ebf8c423f415298dc10ae4e14fe89.jpg\" style=\"display:block;margin: 0 auto;\" \/>De tv\u00e5 huvudmetoderna f\u00f6r att \u00e5teranv\u00e4nda kod \u00e4r arv och komposition, och b\u00e5da har sina f\u00f6rdelar och nackdelar. Vanligtvis f\u00f6redras den andra eftersom den \u00e4r mer flexibel.<\/p>\n<p>Komposition m\u00f6jligg\u00f6r f\u00f6r\u00e4ndring av klassens beteende under k\u00f6rning genom att st\u00e4lla in dess egenskaper. Vid implementering av gr\u00e4nssnitt anv\u00e4nds polymorfism, vilket ger en mer flexibel implementation.<\/p>\n<p>\u00c4ven \"Effective Java\" av Joshua Bloch rekommenderar att man f\u00f6redrar komposition framf\u00f6r arv.<\/p>\n<h3>Principen om Barbara Liskovs substitutionsprincip (LSP)<\/h3>\n<p>\n\u00c4nnu en princip fr\u00e5n SOLID-verktygen. Den s\u00e4ger att underklasser ska kunna ers\u00e4tta sin superklass. Det vill s\u00e4ga metoder och funktioner som arbetar med superklassen m\u00e5ste kunna fungera utan problem med dess underklasser.<\/p>\n<p>LSP \u00e4r kopplad b\u00e5de till principen om enhetligt ansvar och principiell delning av ansvar. Om en klass erbjuder mer funktionalitet \u00e4n en underklass, kommer den senare inte att st\u00f6dja vissa funktioner, vilket bryter mot denna princip.<\/p>\n<p>H\u00e4r \u00e4r en kodsnutt som bryter mot LSP.<\/p>\n<p><img decoding=\"async\" alt=\"10 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r veta\" src=\"\/wp-content\/uploads\/2019\/06\/8c412a2cb4d1f7e53f69afc4ef46a967.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nMetoden area(Rectangle r) ber\u00e4knar arean av Rectangle. Programmet kommer att krascha efter att ha k\u00f6rt Square, eftersom Square h\u00e4r inte \u00e4r en Rectangle. Enligt principen LSP b\u00f6r funktioner som anv\u00e4nder referenser till bas-klasser kunna anv\u00e4nda \u00e4ven objekt av underklasser utan ytterligare instruktioner.<\/p>\n<p>Denna princip, som \u00e4r en specifik definition av underklass, f\u00f6reslogs av Barbara Liskov 1987 vid en konferens d\u00e4r hon h\u00e5llit en huvudf\u00f6rel\u00e4sning med titeln \"Databasfr\u00e5gor och hierarkier\" - d\u00e4rav namnet.<\/p>\n<h3>Principen om interface-separation (ISP)<\/h3>\n<p>\nYtterligare en princip fr\u00e5n SOLID. Enligt den b\u00f6r ett interface som inte anv\u00e4nds inte implementeras. Att f\u00f6lja denna princip hj\u00e4lper systemet att f\u00f6rbli flexibelt och redo f\u00f6r refactoring n\u00e4r f\u00f6r\u00e4ndringar g\u00f6rs i logiken.<\/p>\n<p>Denna situation uppst\u00e5r ofta n\u00e4r ett interface inneh\u00e5ller flera funktionaliteter, men kunden beh\u00f6ver bara en av dem.<\/p>\n<p>Eftersom det \u00e4r en komplex uppgift att skriva ett interface, kommer det att bli problematiskt att \u00e4ndra det efter att det slutf\u00f6rts utan att bryta n\u00e5got.<\/p>\n<p>En f\u00f6rdel med ISP-principen i Java \u00e4r att man f\u00f6rst m\u00e5ste implementera alla metoder, och f\u00f6rst d\u00e4refter kan de anv\u00e4ndas av klasser. D\u00e4rf\u00f6r ger principen m\u00f6jlighet att minska antalet metoder.<\/p>\n<p><img decoding=\"async\" alt=\"10 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r veta\" src=\"\/wp-content\/uploads\/2019\/06\/ea3e314e9f7766e8c1d3ce46d0dcdc09.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Programmering f\u00f6r interface, inte implementation<\/h3>\n<p>\nH\u00e4r \u00e4r det tydligt fr\u00e5n namnet. Till\u00e4mpningen av denna princip leder till skapandet av flexibel kod som kan fungera med vilken ny implementation av ett interface som helst.<\/p>\n<p>Man b\u00f6r anv\u00e4nda interface-typ f\u00f6r variabler, returtyper eller argumenttyp i metoden. Exempel \u2014 anv\u00e4ndning av SuperClass ist\u00e4llet f\u00f6r SubClass.<\/p>\n<p>Det vill s\u00e4ga:<\/p>\n<p><i>List numbers = getNumbers();<\/i><\/p>\n<p>Och inte:<\/p>\n<p><i>ArrayList numbers = getNumbers();<\/i><\/p>\n<p>H\u00e4r \u00e4r en praktisk implementation av det som n\u00e4mnts ovan.<\/p>\n<p><img decoding=\"async\" alt=\"10 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r veta\" src=\"\/wp-content\/uploads\/2019\/06\/8bbcd8342a9870bc28272f0550a8664c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Delegationsprincipen<\/h3>\n<p>\nEtt vanligt exempel \u00e4r metoderna equals() och hashCode() i Java. N\u00e4r tv\u00e5 objekt ska j\u00e4mf\u00f6ras, delegeras denna \u00e5tg\u00e4rd till den aktuella klassen ist\u00e4llet f\u00f6r klienten.<\/p>\n<p>F\u00f6rdelen med principen \u00e4r avsaknaden av kodduplicering och relativt enkel f\u00f6r\u00e4ndring av beteende. Den \u00e4r ocks\u00e5 till\u00e4mpbar p\u00e5 h\u00e4ndelsedelegation.<\/p>\n<p><img decoding=\"async\" alt=\"10 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r veta\" src=\"\/wp-content\/uploads\/2019\/06\/c9ca40cb27e288e5e31ebfba76fa36a5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nAlla dessa principer g\u00f6r det m\u00f6jligt att skriva mer flexibel, vacker och p\u00e5litlig kod med h\u00f6g koppling och l\u00e5g beroende. Sj\u00e4lvklart \u00e4r teorin bra, men f\u00f6r att utvecklaren verkligen ska b\u00f6rja anv\u00e4nda de f\u00f6rv\u00e4rvade kunskaperna, beh\u00f6vs praktik. N\u00e4sta steg efter att ha beh\u00e4rskat OOP-principerna kan vara att studera designm\u00f6nster f\u00f6r att l\u00f6sa vanliga problem inom mjukvaruutveckling.<\/p>\n<blockquote><p><b>Skillbox rekommenderar:<\/b><\/p>\n<ul>\n<li>Praktisk kurs <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\">\u00abMobilutvecklare PRO\u00bb<\/a><\/noindex>.<\/li>\n<li>Till\u00e4mplig onlinekurs <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\">Dataanalytiker p\u00e5 Python<\/a><\/noindex>.<\/li>\n<li>Tv\u00e5\u00e5rig praktisk kurs <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\">\u00abJag \u00e4r PRO Webbutvecklare\u00bb<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p>K\u00e4lla: <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.4 - 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\/sv\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 principer f\u00f6r objektorienterad programmering som varje utvecklare b\u00f6r k\u00e4nna till | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/34855","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=34855"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/34855\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/26244"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=34855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=34855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=34855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}