{"id":632,"date":"2018-04-11T20:55:37","date_gmt":"2018-04-11T20:55:37","guid":{"rendered":"http:\/\/hayperek.pl\/?p=632"},"modified":"2018-04-11T20:55:37","modified_gmt":"2018-04-11T20:55:37","slug":"widgety-cz-2","status":"publish","type":"post","link":"https:\/\/hayperek.pl\/en\/2018\/04\/11\/widgety-cz-2\/","title":{"rendered":"Widgety &#8211; cz. 2"},"content":{"rendered":"<p>Dzi\u015b mia\u0142o by\u0107 bardziej kolorowo&#8230; Ale czasami zadzia\u0142a tzw. z\u0142o\u015bliwo\u015b\u0107 rzeczy martwych i spowoduje, \u017ce pozostajemy bez sprawnego sprz\u0119tu \ud83d\ude41 Tak wi\u0119c ma\u0142a zmiana plan\u00f3w: zamiast bawi\u0107 si\u0119 w pisanie widget\u00f3w, spr\u00f3bujemy zastanowi\u0107 si\u0119 nad rozs\u0105dnym zaprojektowaniem ich struktury. Do dzie\u0142a!<\/p>\n<h5>Widget jako abstrakcja<\/h5>\n<p>S\u0142owo &#8222;widget&#8221; samo w sobie definiuje jedynie og\u00f3lnie zbi\u00f3r obiekt\u00f3w graficznych &#8211; bez konkretyzowania ich zadania czy kszta\u0142tu. M\u00f3wi\u0105c j\u0119zykiem developer\u00f3w odzwierciedla pewn\u0105 abstrakcj\u0119. C\u00f3\u017c bowiem znaczy stwierdzenie &#8222;<em>narysuj widget<\/em>&#8221; lub &#8222;<em>stw\u00f3rz widget<\/em>&#8222;, je\u015bli nie b\u0119dziemy posiada\u0107 precyzyjnej wiedzy na temat <strong>co dok\u0142adnie <\/strong> mamy narysowa\u0107 czy zbudowa\u0107. <\/p>\n<p>Z drugiej strony, niejako przypadkiem, stworzyli\u015bmy szkic interfejsu jaki ka\u017cdy widget powinien posiada\u0107: zbuduj i narysuj \ud83d\ude42 Osoby zaznajomione z Programowaniem Orientowanym Obiektowo (ang. OOP) zapewne ju\u017c wiedz\u0105 dok\u0142adnie, \u017ce widget stanowi idealnego kandydata na tzw. klas\u0119 abstrakcyjn\u0105. Temat ten chcia\u0142bym rozwin\u0105\u0107 w odr\u0119bnym artykule, w odniesieniu do j\u0119zyka C++.<\/p>\n<h5>Widget jako kontener<\/h5>\n<p>Czy widget mo\u017ce zawiera\u0107 inne widgety? Oczywi\u015bcie! Nawet nasza wst\u0119pna lista z <a href=\"http:\/\/hayperek.pl\/en\/2018\/04\/10\/widgety-cz-1\/\">poprzedniego artyku\u0142u<\/a> zawiera widget typu Box, kt\u00f3rego zadaniem jest tylko i wy\u0142\u0105cznie &#8222;grupowanie&#8221; innych kontrolek. <\/p>\n<blockquote><p>Jaki ma sens tworzenie widgetu tylko po to, aby opakowa\u0142 inne? Czy to aby nie strata czasu i pracy?<\/p><\/blockquote>\n<p>Pozornie &#8211; tak. Obeszliby\u015bmy si\u0119 r\u00f3wnie\u017c bez kontener\u00f3w. Maj\u0105 one jednak jedn\u0105, ogromn\u0105 zalet\u0119. Widgety b\u0119d\u0105ce ich sk\u0142adnikami mog\u0105 &#8222;odziedziczy\u0107&#8221; po swoim kontenerze np. kr\u00f3j czcionki czy kolorystyk\u0119. W ten spos\u00f3b zamiast mozolnie tworzy\u0107 widget od zera, mo\u017cna bazowa\u0107 na nadrz\u0119dnych parametrach, dostarczanych przez kontener.<\/p>\n<p>Na dzi\u015b starczy nam ju\u017c rozwa\u017ca\u0144, wymuszonych niejako problemami ze sprz\u0119tem. Mam nadziej\u0119, \u017ce jutro uda si\u0119 wskrzesi\u0107 urz\u0105dzenie z powrotem i pchn\u0105\u0107 temat widget\u00f3w dalej.<\/p>","protected":false},"excerpt":{"rendered":"<p>Dzi\u015b mia\u0142o by\u0107 bardziej kolorowo&#8230; Ale czasami zadzia\u0142a tzw. z\u0142o\u015bliwo\u015b\u0107 rzeczy martwych i spowoduje, \u017ce pozostajemy bez sprawnego sprz\u0119tu \ud83d\ude41 Tak wi\u0119c ma\u0142a zmiana plan\u00f3w: zamiast bawi\u0107 si\u0119 w pisanie widget\u00f3w, spr\u00f3bujemy zastanowi\u0107 si\u0119 nad rozs\u0105dnym zaprojektowaniem ich struktury. Do dzie\u0142a! Widget jako abstrakcja S\u0142owo &#8222;widget&#8221; samo w sobie definiuje jedynie og\u00f3lnie zbi\u00f3r obiekt\u00f3w graficznych [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":633,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":{"0":"post-632","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-stodni","9":"post-with-thumbnail","10":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/comments?post=632"}],"version-history":[{"count":1,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/632\/revisions"}],"predecessor-version":[{"id":634,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/632\/revisions\/634"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media\/633"}],"wp:attachment":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media?parent=632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/categories?post=632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/tags?post=632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}