{"id":3717,"date":"2022-11-01T10:08:29","date_gmt":"2022-11-01T09:08:29","guid":{"rendered":"https:\/\/gdksoftware.com\/knowledgebase\/delphi-interfaces-and-collections"},"modified":"2023-03-31T17:24:35","modified_gmt":"2023-03-31T16:24:35","slug":"interfaces-e-colecoes-do-delphi","status":"publish","type":"knowledge","link":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/interfaces-e-colecoes-do-delphi","title":{"rendered":"Interfaces e cole\u00e7\u00f5es do Delphi"},"content":{"rendered":"<h2>Introdu\u00e7\u00e3o &#8211; Interfaces e cole\u00e7\u00f5es Delphi<\/h2>\n<p>Na GDK estamos trabalhando continuamente com ferramentas e t\u00e9cnicas de ponta. Isto significa que tamb\u00e9m precisamos nos manter atualizados! Fazemos isso utilizando sess\u00f5es de conhecimento nas quais discutimos v\u00e1rios assuntos. Nossa \u00faltima sess\u00e3o foi sobre interfaces e cole\u00e7\u00f5es Delphi.<\/p>\n<p>&nbsp;<\/p>\n<h2>Por que voc\u00ea deve usar interfaces em Delphi?<\/h2>\n<p>Antes de mais nada: Uma interface fornece um contrato para conversar quando trabalhamos com objetos que o implementam. Como resultado, n\u00e3o precisamos nos preocupar com os detalhes de implementa\u00e7\u00e3o desse objeto (da perspectiva do c\u00f3digo de chamada). \u00c9 um dos melhores exemplos dos princ\u00edpios da Solid.<\/p>\n<p>Segundo: em Delphi, n\u00f3s os usamos para evitar vazamentos de mem\u00f3ria, usando seu mecanismo de contagem de refer\u00eancia. Se uma interface ficar sem escopo e for a \u00faltima refer\u00eancia ao objeto para o qual estava apontando, ent\u00e3o ele ser\u00e1 automaticamente removido.<\/p>\n<h2>Cole\u00e7\u00f5es Delphi<\/h2>\n<p>As cole\u00e7\u00f5es foram implementadas desde o in\u00edcio da Delphi. Poder\u00edamos escolher entre TLists para indica\u00e7\u00f5es, TObjectList para objetos (que podem ser de propriedade da lista; muito \u00fatil), TStringList etc. Embora estas cole\u00e7\u00f5es sejam muito \u00fateis, elas t\u00eam algumas limita\u00e7\u00f5es. Ao utiliz\u00e1-las, voc\u00ea sempre precisa lan\u00e7ar para obter o tipo de dado correto da lista. Isto tamb\u00e9m torna o c\u00f3digo propenso a erros, porque o compilador n\u00e3o reclama se um objeto \u00e9 lan\u00e7ado para uma classe diferente da que realmente \u00e9. Voc\u00ea s\u00f3 o descobre durante o tempo de execu\u00e7\u00e3o.<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\">MyObject <span style=\"color: #333333;\">:=<\/span> TMyType(MyList[<span style=\"color: #0000dd; font-weight: bold;\">0<\/span>])<span style=\"color: #333333;\">;<\/span>\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h2>Cole\u00e7\u00f5es de Gen\u00e9ricos<\/h2>\n<p>Para contornar toda a quest\u00e3o da fundi\u00e7\u00e3o e para tornar o c\u00f3digo mais leg\u00edvel, a Cole\u00e7\u00e3o de Gen\u00e9ricos foi adicionada na Delphi 2009. Como resultado, podemos agora especificar o tipo de dado que vai na cole\u00e7\u00e3o que usamos. Fazemos isso especificando o tipo de dado entre colchetes angulares. Agora o compilador sabe o que vai na cole\u00e7\u00e3o e a chance de fundir na classe errada \u00e9 agora minimizada.<\/p>\n<p>\u00c9 at\u00e9 poss\u00edvel utilizar interfaces como tipos de par\u00e2metros. Isto se aplica a todas as implementa\u00e7\u00f5es de coleta, exceto para a TObjectList. Esta classe precisa de um tipo que se estenda do TObject.<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\">MyList <span style=\"color: #333333;\">:=<\/span> TList<span style=\"color: #333333;\">&lt;<\/span>TMyType<span style=\"color: #333333;\">&gt;.<\/span>Create<span style=\"color: #333333;\">;<\/span>\r\nMyList<span style=\"color: #333333;\">.<\/span>Add(MyObject)<span style=\"color: #333333;\">;<\/span>\r\n\r\nMyOtherObject <span style=\"color: #333333;\">:=<\/span> MyList[<span style=\"color: #0000dd; font-weight: bold;\">0<\/span>]<span style=\"color: #333333;\">;<\/span>\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h2>Spring &#8211; Cole\u00e7\u00f5es e Interfaces<\/h2>\n<p>O melhor de dois mundos! Agora podemos usar nossas queridas interfaces junto com as cole\u00e7\u00f5es e obter todos os benef\u00edcios do uso de interfaces. A \u00fanica coisa que ainda nos falta \u00e9 o fato de que os objetos das Cole\u00e7\u00f5es Gen\u00e9ricas n\u00e3o implementam uma interface por si s\u00f3.<br \/>\nA estrutura Spring4D (entre outras classes muito \u00fateis) fornece exatamente isso: listas que s\u00e3o referenciadas usando interfaces. E mais: como as classes da cole\u00e7\u00e3o Spring4D s\u00e3o constru\u00eddas do zero, elas fornecem muitas fun\u00e7\u00f5es \u00fateis que n\u00e3o est\u00e3o dispon\u00edveis na estrutura dos Generics Collections. Confira a documenta\u00e7\u00e3o da Spring4D para saber mais.<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\">MyTypedObject <span style=\"color: #333333;\">:=<\/span> TMyType<span style=\"color: #333333;\">.<\/span>Create)<span style=\"color: #333333;\">;<\/span>\r\n\r\nMyList <span style=\"color: #333333;\">:=<\/span> TCollections<span style=\"color: #333333;\">.<\/span>CreateList<span style=\"color: #333333;\">&lt;<\/span>IMyType<span style=\"color: #333333;\">&gt;;<\/span>\r\nMyList<span style=\"color: #333333;\">.<\/span>Add(MyTypedObject)<span style=\"color: #333333;\">;<\/span>\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h2>Juntando tudo<\/h2>\n<p>Ao utilizarmos Cole\u00e7\u00f5es Gen\u00e9ricas em combina\u00e7\u00e3o com interfaces, asseguramos automaticamente que nosso c\u00f3digo seja menos propenso a erros. Isto porque deixamos o compilador saber o que entra nas cole\u00e7\u00f5es que usamos para que ele possa verificar se h\u00e1 alguma viola\u00e7\u00e3o.<\/p>\n<p>O que recomendamos vivamente \u00e9 usar a estrutura Spring4D para todas as funcionalidades \u00fateis que ela nos proporciona quando trabalhamos com cole\u00e7\u00f5es!<\/p>\n","protected":false},"featured_media":0,"parent":0,"template":"","class_list":["post-3717","knowledge","type-knowledge","status-publish","hentry","knowledge-category-arquivo-delphi"],"acf":{"author":1655,"type_hero":"compact","hero_image":3699,"hero_image_position":"","hero_title":"Interfaces e cole\u00e7\u00f5es Delphi","hero_content":"","hero_link":null,"hero_show_h1":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Interfaces e cole\u00e7\u00f5es do Delphi - GDK Software<\/title>\n<meta name=\"description\" content=\"A GDK est\u00e1 trabalhando continuamente com t\u00e9cnicas de ponta. Sempre nos mantendo atualizados! Nossa \u00faltima sess\u00e3o foi sobre interfaces e cole\u00e7\u00f5es do Delphi.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/interfaces-e-colecoes-do-delphi\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Interfaces e cole\u00e7\u00f5es do Delphi\" \/>\n<meta property=\"og:description\" content=\"A GDK est\u00e1 trabalhando continuamente com t\u00e9cnicas de ponta. Sempre nos mantendo atualizados! Nossa \u00faltima sess\u00e3o foi sobre interfaces e cole\u00e7\u00f5es do Delphi.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/interfaces-e-colecoes-do-delphi\" \/>\n<meta property=\"og:site_name\" content=\"GDK Software\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-31T16:24:35+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/interfaces-e-colecoes-do-delphi\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/interfaces-e-colecoes-do-delphi\",\"name\":\"Interfaces e cole\u00e7\u00f5es do Delphi - GDK Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br#website\"},\"datePublished\":\"2022-11-01T09:08:29+00:00\",\"dateModified\":\"2023-03-31T16:24:35+00:00\",\"description\":\"A GDK est\u00e1 trabalhando continuamente com t\u00e9cnicas de ponta. Sempre nos mantendo atualizados! Nossa \u00faltima sess\u00e3o foi sobre interfaces e cole\u00e7\u00f5es do Delphi.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/interfaces-e-colecoes-do-delphi#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/interfaces-e-colecoes-do-delphi\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/interfaces-e-colecoes-do-delphi#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledgebase\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Delphi\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/knowledgebase-category\\\/arquivo-delphi\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Interfaces e cole\u00e7\u00f5es do Delphi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br#website\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\",\"name\":\"GDK Software\",\"description\":\"Zet de stip op je horizon\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Interfaces e cole\u00e7\u00f5es do Delphi - GDK Software","description":"A GDK est\u00e1 trabalhando continuamente com t\u00e9cnicas de ponta. Sempre nos mantendo atualizados! Nossa \u00faltima sess\u00e3o foi sobre interfaces e cole\u00e7\u00f5es do Delphi.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/interfaces-e-colecoes-do-delphi","og_locale":"pt_BR","og_type":"article","og_title":"Interfaces e cole\u00e7\u00f5es do Delphi","og_description":"A GDK est\u00e1 trabalhando continuamente com t\u00e9cnicas de ponta. Sempre nos mantendo atualizados! Nossa \u00faltima sess\u00e3o foi sobre interfaces e cole\u00e7\u00f5es do Delphi.","og_url":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/interfaces-e-colecoes-do-delphi","og_site_name":"GDK Software","article_modified_time":"2023-03-31T16:24:35+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. tempo de leitura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/interfaces-e-colecoes-do-delphi","url":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/interfaces-e-colecoes-do-delphi","name":"Interfaces e cole\u00e7\u00f5es do Delphi - GDK Software","isPartOf":{"@id":"https:\/\/gdksoftware.com\/pt-br#website"},"datePublished":"2022-11-01T09:08:29+00:00","dateModified":"2023-03-31T16:24:35+00:00","description":"A GDK est\u00e1 trabalhando continuamente com t\u00e9cnicas de ponta. Sempre nos mantendo atualizados! Nossa \u00faltima sess\u00e3o foi sobre interfaces e cole\u00e7\u00f5es do Delphi.","breadcrumb":{"@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/interfaces-e-colecoes-do-delphi#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/interfaces-e-colecoes-do-delphi"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/interfaces-e-colecoes-do-delphi#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gdksoftware.com\/pt-br"},{"@type":"ListItem","position":2,"name":"Knowledgebase","item":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento"},{"@type":"ListItem","position":3,"name":"Delphi","item":"https:\/\/gdksoftware.com\/pt-br\/knowledgebase-category\/arquivo-delphi"},{"@type":"ListItem","position":4,"name":"Interfaces e cole\u00e7\u00f5es do Delphi"}]},{"@type":"WebSite","@id":"https:\/\/gdksoftware.com\/pt-br#website","url":"https:\/\/gdksoftware.com\/pt-br","name":"GDK Software","description":"Zet de stip op je horizon","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gdksoftware.com\/pt-br?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"}]}},"_links":{"self":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/knowledge\/3717","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/knowledge"}],"about":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/types\/knowledge"}],"acf:post":[{"embeddable":true,"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/team\/1655"}],"wp:attachment":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/media?parent=3717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}