{"id":854,"date":"2024-09-23T10:16:46","date_gmt":"2024-09-23T13:16:46","guid":{"rendered":"https:\/\/adrianosantostreina.com.br\/blog\/?p=854"},"modified":"2024-09-30T16:00:44","modified_gmt":"2024-09-30T19:00:44","slug":"poo-2o-pilar-heranca","status":"publish","type":"post","link":"https:\/\/adrianosantostreina.com.br\/blog\/poo-2o-pilar-heranca\/","title":{"rendered":"POO 2o. Pilar &#8211; Heran\u00e7a"},"content":{"rendered":"\n<p>A <strong>heran\u00e7a<\/strong> \u00e9 o segundo pilar da Programa\u00e7\u00e3o Orientada a Objetos (POO) e desempenha um papel crucial ao permitir que classes compartilhem e reutilizem c\u00f3digo de maneira eficiente. Com a heran\u00e7a, \u00e9 poss\u00edvel criar novas classes com base em uma classe j\u00e1 existente, herdando atributos e comportamentos. Isso ajuda a reduzir a duplica\u00e7\u00e3o de c\u00f3digo, facilita a manuten\u00e7\u00e3o e promove a extensibilidade do sistema.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h4 class=\"wp-block-heading\">Por que a Heran\u00e7a \u00e9 Importante?<\/h4>\n\n\n\n<p>Heran\u00e7a \u00e9 fundamental para evitar a duplica\u00e7\u00e3o de c\u00f3digo. Imagine um cen\u00e1rio em um sistema de <strong>ERP<\/strong>, onde voc\u00ea tem diferentes tipos de entidades que compartilham caracter\u00edsticas semelhantes, como clientes, fornecedores e funcion\u00e1rios. Todas essas entidades possuem atributos comuns, como nome, endere\u00e7o e CPF. Em vez de repetir esses atributos e m\u00e9todos em v\u00e1rias classes, voc\u00ea pode criar uma classe base (geral), chamada <code>TPessoa<\/code>, que possui essas caracter\u00edsticas comuns. Outras classes, como <code>TCliente<\/code> e <code>TFornecedor<\/code>, podem herdar de <code>TPessoa<\/code>, economizando tempo e esfor\u00e7o ao evitar a duplica\u00e7\u00e3o de c\u00f3digo.<\/p>\n\n\n\n<p>Al\u00e9m disso, a heran\u00e7a facilita a manuten\u00e7\u00e3o e a extens\u00e3o de funcionalidades. Se voc\u00ea precisar adicionar uma nova funcionalidade que \u00e9 comum a todas as classes derivadas (clientes, fornecedores, etc.), basta adicionar essa funcionalidade na classe base. Todas as classes que herdam da classe base automaticamente ter\u00e3o essa nova funcionalidade.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Exemplo Pr\u00e1tico em Delphi<\/h4>\n\n\n\n<p>Aqui est\u00e1 um exemplo b\u00e1sico de heran\u00e7a em Delphi, onde <code>TCliente<\/code> e <code>TFornecedor<\/code> herdam de <code>TPessoa<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \" >type\n  TPessoa = class\n  protected\n    FNome: string;\n    FEndereco: string;\n    FCPF: string;\n  public\n    procedure ExibirDados; virtual;\n  end;\n\n  TCliente = class(TPessoa)\n  private\n    FCredito: Currency;\n  public\n    procedure ExibirDados; override;\n    procedure DefinirCredito(Valor: Currency);\n  end;\n\n  TFornecedor = class(TPessoa)\n  private\n    FCNPJ: string;\n  public\n    procedure ExibirDados; override;\n    procedure DefinirCNPJ(CNPJ: string);\n  end;\n\nprocedure TPessoa.ExibirDados;\nbegin\n  Writeln('Nome: ' + FNome);\n  Writeln('Endere\u00e7o: ' + FEndereco);\n  Writeln('CPF: ' + FCPF);\nend;\n\nprocedure TCliente.ExibirDados;\nbegin\n  inherited;\n  Writeln('Cr\u00e9dito: R$' + CurrToStr(FCredito));\nend;\n\nprocedure TCliente.DefinirCredito(Valor: Currency);\nbegin\n  FCredito := Valor;\nend;\n\nprocedure TFornecedor.ExibirDados;\nbegin\n  inherited;\n  Writeln('CNPJ: ' + FCNPJ);\nend;\n\nprocedure TFornecedor.DefinirCNPJ(CNPJ: string);\nbegin\n  FCNPJ := CNPJ;\nend;\n<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Explica\u00e7\u00e3o do Exemplo<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Classe Base <code>TPessoa<\/code>:<\/strong> Cont\u00e9m atributos e m\u00e9todos comuns a qualquer tipo de pessoa no sistema, como nome, endere\u00e7o e CPF. O m\u00e9todo <code>ExibirDados<\/code> \u00e9 declarado como <code>virtual<\/code>, permitindo que as classes derivadas o sobrescrevam.<\/li>\n\n\n\n<li><strong>Classe <code>TCliente<\/code>:<\/strong> Herda de <code>TPessoa<\/code> e adiciona o atributo <code>Credito<\/code>, que representa o cr\u00e9dito dispon\u00edvel para o cliente. O m\u00e9todo <code>ExibirDados<\/code> \u00e9 sobrescrito (<code>override<\/code>) para incluir as informa\u00e7\u00f5es de cr\u00e9dito, mas o m\u00e9todo herdado da classe base (<code>inherited<\/code>) \u00e9 chamado para exibir os dados comuns.<\/li>\n\n\n\n<li><strong>Classe <code>TFornecedor<\/code>:<\/strong> Tamb\u00e9m herda de <code>TPessoa<\/code> e adiciona o atributo <code>CNPJ<\/code>. Assim como em <code>TCliente<\/code>, o m\u00e9todo <code>ExibirDados<\/code> \u00e9 sobrescrito para incluir o CNPJ, mas os dados b\u00e1sicos s\u00e3o exibidos chamando o m\u00e9todo herdado.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Benef\u00edcios da Heran\u00e7a<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Reutiliza\u00e7\u00e3o de C\u00f3digo:<\/strong> Ao usar heran\u00e7a, classes especializadas herdam as funcionalidades da classe base, eliminando a necessidade de duplicar c\u00f3digo comum.<\/li>\n\n\n\n<li><strong>Facilidade de Manuten\u00e7\u00e3o:<\/strong> Altera\u00e7\u00f5es na classe base se propagam para as classes derivadas, o que facilita a implementa\u00e7\u00e3o de novas funcionalidades em v\u00e1rias classes ao mesmo tempo.<\/li>\n\n\n\n<li><strong>Organiza\u00e7\u00e3o e Extensibilidade:<\/strong> A heran\u00e7a torna o c\u00f3digo mais modular e organizado. A classe base pode ser estendida com novas funcionalidades, e as classes derivadas podem sobrescrever m\u00e9todos, adicionando comportamentos espec\u00edficos sem alterar a l\u00f3gica base.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">O que veremos a seguir?<\/h3>\n\n\n\n<p>No pr\u00f3ximo artigo, abordaremos o <strong>Polimorfismo<\/strong>, o terceiro pilar da POO. Veremos como ele permite que objetos de diferentes classes sejam tratados de maneira uniforme, promovendo a flexibilidade e simplifica\u00e7\u00e3o do c\u00f3digo.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Participe da Comunidade no Telegram<\/h3>\n\n\n\n<p>\ud83d\ude80 Quer continuar essa discuss\u00e3o e trocar ideias com outros desenvolvedores? Junte-se \u00e0 nossa comunidade no Telegram! L\u00e1, voc\u00ea pode comentar sobre o que achou deste artigo, tirar suas d\u00favidas e compartilhar suas experi\u00eancias com POO e Delphi, e ainda discutir ou tirar suas d\u00favidas sobre os mais variados temas em uma comunidade com mais de 1.000 desenvolvedores.<\/p>\n\n\n\n<p>\ud83d\udd17 <a href=\"https:\/\/t.me\/AdrianoSantosCommunity\" target=\"_blank\" rel=\"noreferrer noopener\">Clique aqui para entrar na comunidade<\/a><\/p>\n\n\n\n<p>Te vejo l\u00e1!<\/p>\n\n\n\n<p>Adriano Santos<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A heran\u00e7a \u00e9 o segundo pilar da Programa\u00e7\u00e3o Orientada a Objetos (POO) e desempenha um papel crucial ao permitir que classes compartilhem e reutilizem c\u00f3digo de maneira eficiente. Com a heran\u00e7a, \u00e9 poss\u00edvel criar novas classes com base em uma classe j\u00e1 existente, herdando atributos e comportamentos. Isso ajuda a reduzir a duplica\u00e7\u00e3o de c\u00f3digo, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":856,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-854","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/854","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/comments?post=854"}],"version-history":[{"count":1,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/854\/revisions"}],"predecessor-version":[{"id":855,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/854\/revisions\/855"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media\/856"}],"wp:attachment":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media?parent=854"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/categories?post=854"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/tags?post=854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}