{"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\/da\/blog\/news\/10-printsipov-obektno-orientirovannogo-programmirovaniya-o-kotoryh-dolzhen-znat-kazhdyj-razrabotchik","title":{"rendered":"10 principper for objektorienteret programmering, som hver udvikler skal kende.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"10 principper for objektorienteret programmering, som hver udvikler skal kende.\" src=\"\/wp-content\/uploads\/2019\/06\/129b610bc2576f8d753dfa72395f89f6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nJeg m\u00f8der ofte udviklere, som ikke har h\u00f8rt om SOLID-principperne (vi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillbox\/blog\/442928\/\">har tidligere skrevet om dem her<\/a><\/noindex>. \u2014 red.) eller om objektorienteret programmering (OOP), eller som har h\u00f8rt om det, men ikke anvender det i praksis. I denne artikel beskrives fordelene ved OOP-principper, som hj\u00e6lper udviklere i deres daglige arbejde. Nogle er velkendte, andre mindre s\u00e5, s\u00e5 artiklen vil v\u00e6re nyttig for b\u00e5de begyndere og erfarne programm\u00f8rer.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Vi minder om:<\/b> <i>for alle l\u00e6sere af \u00abHabr\u00bb \u2014 rabat p\u00e5 10.000 rubler ved tilmelding til ethvert Skillbox-kursus med rabatkoden \u00abHabr\u00bb.<\/i><\/p>\n<p><b>Skillbox anbefaler:<\/b> Online uddannelseskursus <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\">\u00abJava-udvikler\u00bb<\/a><\/noindex>.<\/p><\/blockquote>\n<p><\/p>\n<h3>DRY (Don\u2019t Repeat Yourself)<\/h3>\n<p>\nEt ret simpelt princip, hvis essens er klar fra navnet: \u00abGentag dig ikke\u00bb. For programm\u00f8rer betyder det n\u00f8dvendigheden af at undg\u00e5 duplikeret kode samt muligheden for at anvende abstraktion i arbejdet.<\/p>\n<p>Hvis der er to gentagne sektioner i koden, b\u00f8r de kombineres til en metode. Hvis en fastv\u00e6rdi bruges mere end \u00e9n gang, er det en god ide at omdanne den til en global konstant.<\/p>\n<p>Dette er n\u00f8dvendigt for at forenkle koden og g\u00f8re dens vedligeholdelse lettere, hvilket er det prim\u00e6re m\u00e5l med OOP. Misbrug ikke sammenl\u00e6gning, da den samme kode ikke vil best\u00e5 pr\u00f8ven som OrderId og SSN.<\/p>\n<h3>Indkapsling af \u00e6ndringer<\/h3>\n<p>\nSoftwareprodukter fra de fleste virksomheder udvikler sig konstant. Dette betyder, at koden skal \u00e6ndres og vedligeholdes. Man kan forenkle livet ved hj\u00e6lp af indkapsling. Dette muligg\u00f8r mere effektiv testning og vedligeholdelse af den eksisterende kodebase. <noindex><a rel=\"nofollow\" href=\"http:\/\/javarevisited.blogspot.com\/2011\/12\/factory-design-pattern-java-example.html\">Her er et eksempel<\/a><\/noindex>.<\/p>\n<p>Hvis du skriver i Java, s\u00e5 <noindex><a rel=\"nofollow\" href=\"http:\/\/javarevisited.blogspot.sg\/2012\/03\/private-in-java-why-should-you-always.html#axzz559dyoLSA\">tildel som standard private til metoder og variabler<\/a><\/noindex>.<\/p>\n<h3>\u00c5benhed\/lukkethed-princippet<\/h3>\n<p>\nDette princip kan nemt huskes ved at l\u00e6se f\u00f8lgende udsagn: \u00abSoftwareenheder (klasser, moduler, funktioner osv.) skal v\u00e6re \u00e5bne for udvidelse, men lukkede for \u00e6ndringer\u00bb. I praksis betyder det, at de kan tillade \u00e6ndring af adf\u00e6rd uden at \u00e6ndre den oprindelige kildekode.<\/p>\n<p>Princippet er vigtigt, n\u00e5r \u00e6ndringer i kildekoden kr\u00e6ver en gennemgang, modultestning og andre procedurer. Koden, der f\u00f8lger princippet om \u00e5benhed\/lukkethed, \u00e6ndres ikke ved udvidelse, hvilket betyder, at der er langt f\u00e6rre problemer med den.<\/p>\n<p>Her er et eksempel p\u00e5 kode, der overtr\u00e6der dette princip.<\/p>\n<p><img decoding=\"async\" alt=\"10 principper for objektorienteret programmering, som hver udvikler skal kende.\" src=\"\/wp-content\/uploads\/2019\/06\/85d53972bef28713087acc428deebc3a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nHvis der er behov for at \u00e6ndre noget i den, vil det tage meget tid, fordi man skal \u00e6ndre alle dele af koden, der har forbindelse til det relevante fragment.<\/p>\n<p>Forresten er \u00e5benhed-lukkethed et af SOLID-principperne.<\/p>\n<h3>Princippet om enkelt ansvar (SRP)<\/h3>\n<p>\nEndnu et princip fra SOLID-panelet. Det siger, at \"der kun findes \u00e9n \u00e5rsag til at \u00e6ndre en klasse\". En klasse l\u00f8ser kun \u00e9n opgave. Den kan have flere metoder, men hver af dem bruges kun til at l\u00f8se den overordnede opgave. Alle metoder og egenskaber skal kun tjene dette form\u00e5l. <\/p>\n<p><img decoding=\"async\" alt=\"10 principper for objektorienteret programmering, som hver udvikler skal kende.\" src=\"\/wp-content\/uploads\/2019\/06\/7332d424f27e091192cbbb8dacb13d01.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nV\u00e6rdien af dette princip er, at det sv\u00e6kker forbindelsen mellem den enkelte softwarekomponent og koden. Hvis der tilf\u00f8jes mere end \u00e9n funktionalitet til en klasse, indf\u00f8rer det forbindelse mellem to funktioner. S\u00e5ledes, hvis man \u00e6ndrer en af dem, er der en stor risiko for at \u00f8del\u00e6gge den anden, der er relateret til den f\u00f8rste. Dette betyder en \u00f8get testcyklus for at opdage alle problemer p\u00e5 forh\u00e5nd.<\/p>\n<h3>Princippet om afh\u00e6ngighedsinversion (DIP)<\/h3>\n<p>\n<img decoding=\"async\" alt=\"10 principper for objektorienteret programmering, som hver udvikler skal kende.\" src=\"\/wp-content\/uploads\/2019\/06\/eb1e09cceee028f88fa83fd8d30a189a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nOvenst\u00e5ende er et eksempel p\u00e5 kode, hvor AppManager er afh\u00e6ngig af EventLogWriter, som igen er t\u00e6t knyttet til AppManager. Hvis man har brug for en anden m\u00e5de at vise notifikationer p\u00e5, hvad enten det er push, SMS eller e-mail, skal man \u00e6ndre AppManager-klassen.<\/p>\n<p>Problemet kan l\u00f8ses ved hj\u00e6lp af DIP. S\u00e5 i stedet for AppManager anmoder vi EventLogWriter, som vil blive indf\u00f8rt ved hj\u00e6lp af rammev\u00e6rket.<\/p>\n<p>DIP giver mulighed for uden problemer at udskifte individuelle moduler med andre ved at \u00e6ndre afh\u00e6ngighedsmodulet. Dette giver mulighed for at \u00e6ndre et modul uden at p\u00e5virke de andre.<\/p>\n<h3>Komposition frem for arv<\/h3>\n<p>\n<img decoding=\"async\" alt=\"10 principper for objektorienteret programmering, som hver udvikler skal kende.\" src=\"\/wp-content\/uploads\/2019\/06\/b97ebf8c423f415298dc10ae4e14fe89.jpg\" style=\"display:block;margin: 0 auto;\" \/>Der er to prim\u00e6re metoder til genbrug af kode \u2014 arv og komposition, hvor hver har sine fordele og ulemper. Som regel gives der pr\u00e6ference til den anden, da den er mere fleksibel.<\/p>\n<p>Kompositionen giver mulighed for at \u00e6ndre klassens adf\u00e6rd under k\u00f8rslen ved at indstille dens egenskaber. N\u00e5r man implementerer gr\u00e6nseflader, anvendes polymorfi, hvilket giver en mere fleksibel implementering.<\/p>\n<p>Selv \u201cEffective Java\u201d af Joshua Bloch anbefaler at foretr\u00e6kke komposition frem for arv.<\/p>\n<h3>Barbara Lisks substitutionsprincip (LSP)<\/h3>\n<p>\nEndnu et princip fra SOLID-v\u00e6rkt\u00f8jskassen. Det siger, at subtyper skal kunne udskiftes med supertypen. Det vil sige, at metoder og funktioner, som arbejder med superklassen, skal kunne arbejde problemfrit med dens underklasser.<\/p>\n<p>LSP er relateret til b\u00e5de princippet om enkeltst\u00e5ende ansvar og princippet om ansvarssplit. Hvis en klasse giver mere funktionalitet end en underklasse, vil den sidstn\u00e6vnte ikke underst\u00f8tte nogle funktioner, hvilket bryder dette princip.<\/p>\n<p>Her er et stykke kode, der strider imod LSP.<\/p>\n<p><img decoding=\"async\" alt=\"10 principper for objektorienteret programmering, som hver udvikler skal kende.\" src=\"\/wp-content\/uploads\/2019\/06\/8c412a2cb4d1f7e53f69afc4ef46a967.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nMetoden area(Rectangle r) beregner arealet af Rectangle. Programmet vil fejle efter udf\u00f8relsen af Square, da Square her ikke er en Rectangle. If\u00f8lge LSP skal funktioner, der bruger references til basisklasser, kunne bruge objekter af afledte klasser uden yderligere instruktioner.<\/p>\n<p>Dette princip, som er en specifik definition af subtyper, blev foresl\u00e5et af Barbara Liskov i 1987 ved en konference i et hovedopl\u00e6g med titlen \u00abData Abstraction and Hierarchy\u00bb \u2014 deraf navnet.<\/p>\n<h3>Interface Segregation Principle (ISP)<\/h3>\n<p>\nEndnu et SOLID-princip. If\u00f8lge dette skal et interface, der ikke anvendes, ikke implementeres. At f\u00f8lge dette princip hj\u00e6lper systemet med at forblive fleksibelt og egnet til refaktorisering, n\u00e5r logikken \u00e6ndres.<\/p>\n<p>Ofte opst\u00e5r denne situation, n\u00e5r et interface indeholder flere funktionaliteter, men kunden kun har brug for \u00e9n af dem.<\/p>\n<p>Da det er en kompleks opgave at skrive et interface, vil det v\u00e6re problematisk at \u00e6ndre det efter afslutningen af arbejdet uden at bryde noget.<\/p>\n<p>Fordelen ved ISP-princippet i Java er, at man f\u00f8rst skal implementere alle metoder, og f\u00f8rst derefter kan de bruges af klasserne. Derfor muligg\u00f8r princippet en reduktion af antallet af metoder.<\/p>\n<p><img decoding=\"async\" alt=\"10 principper for objektorienteret programmering, som hver udvikler skal kende.\" src=\"\/wp-content\/uploads\/2019\/06\/ea3e314e9f7766e8c1d3ce46d0dcdc09.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Programmering for interface, ikke implementering<\/h3>\n<p>\nHer er alt klart ud fra titlen. Anvendelsen af denne princip f\u00f8rer til skabelsen af fleksibel kode, der kan arbejde med enhver ny implementering af gr\u00e6nsefladen.<\/p>\n<p>Man b\u00f8r bruge typen af gr\u00e6nsefladen for variable, returnerede typer eller typen af metodeargumentet. Et eksempel er brugen af SuperClass frem for SubClass.<\/p>\n<p>Det vil sige:<\/p>\n<p><i>List numbers = getNumbers();<\/i><\/p>\n<p>Og ikke:<\/p>\n<p><i>ArrayList numbers = getNumbers();<\/i><\/p>\n<p>Her er en praktisk implementering af det, der n\u00e6vnes ovenfor.<\/p>\n<p><img decoding=\"async\" alt=\"10 principper for objektorienteret programmering, som hver udvikler skal kende.\" src=\"\/wp-content\/uploads\/2019\/06\/8bbcd8342a9870bc28272f0550a8664c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Delegationsprincippet<\/h3>\n<p>\nEt almindeligt eksempel er metoderne equals() og hashCode() i Java. N\u00e5r to objekter skal sammenlignes, bliver denne handling givet videre til den relevante klasse i stedet for klienten.<\/p>\n<p>Fordelen ved princippet er frav\u00e6ret af kode duplikering og relativt enkle \u00e6ndringer af adf\u00e6rden. Det kan ogs\u00e5 anvendes til delegation af begivenheder.<\/p>\n<p><img decoding=\"async\" alt=\"10 principper for objektorienteret programmering, som hver udvikler skal kende.\" src=\"\/wp-content\/uploads\/2019\/06\/c9ca40cb27e288e5e31ebfba76fa36a5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nAlle disse principper g\u00f8r det muligt at skrive mere fleksibel, smuk og p\u00e5lidelig kode med h\u00f8j sammenkobling og lav sammenh\u00e6ng. Selvf\u00f8lgelig er teorien vigtig, men for at en udvikler virkelig kan anvende det l\u00e6rte, kr\u00e6ves der praksis. N\u00e6ste skridt efter at mestre OOP-principperne kan v\u00e6re at studere designm\u00f8nstre til l\u00f8sning af almindelige softwareudviklingsproblemer.<\/p>\n<blockquote><p><b>Skillbox anbefaler:<\/b><\/p>\n<ul>\n<li>Praktisk kursus <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\">\u00abMobil udvikler PRO\u00bb<\/a><\/noindex>.<\/li>\n<li>Anvendt online-kursus <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\">\u00abDataanalytiker p\u00e5 Python\u00bb<\/a><\/noindex>.<\/li>\n<li>To\u00e5rigt praktisk kursus <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\">\u00abJeg er Web-udvikler PRO\u00bb<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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 principper for objektorienteret programmering, som enhver udvikler b\u00f8r kende | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/34855","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=34855"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/34855\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/26244"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=34855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=34855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=34855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}