{"id":189,"date":"2025-01-01T08:01:51","date_gmt":"2025-01-01T11:01:51","guid":{"rendered":"http:\/\/wagnersalvi.eti.br\/?p=189"},"modified":"2025-03-04T23:25:44","modified_gmt":"2025-03-05T02:25:44","slug":"polimorfismo-em-programacao-orientada-a-objetos-exemplo-em-c","status":"publish","type":"post","link":"http:\/\/www.wagnersalvi.com.br\/?p=189","title":{"rendered":"Polimorfismo em Programa\u00e7\u00e3o Orientada a Objetos &#8211; Exemplo em C#"},"content":{"rendered":"\n<p>O polimorfismo \u00e9 um dos princ\u00edpios fundamentais da programa\u00e7\u00e3o orientada a objetos e \u00e9 uma t\u00e9cnica que permite que um objeto se comporte de diferentes maneiras em diferentes contextos. Em C#, o polimorfismo pode ser alcan\u00e7ado atrav\u00e9s do uso de heran\u00e7a e interfaces.<\/p>\n\n\n\n<p>A heran\u00e7a \u00e9 um mecanismo em que uma classe pode herdar os atributos e m\u00e9todos de outra classe. Uma classe que herda de outra \u00e9 chamada de classe derivada ou subclasse, e a classe da qual ela herda \u00e9 chamada de classe base ou superclasse. O polimorfismo de subtipos pode ser alcan\u00e7ado atrav\u00e9s da heran\u00e7a.<\/p>\n\n\n\n<p>A interface, por outro lado, \u00e9 um contrato que define um conjunto de m\u00e9todos e propriedades que uma classe deve implementar. Uma classe que implementa uma interface \u00e9 obrigada a fornecer implementa\u00e7\u00f5es para todos os m\u00e9todos e propriedades definidos na interface. O polimorfismo de interface pode ser alcan\u00e7ado atrav\u00e9s do uso de interfaces.<\/p>\n\n\n\n<p>A seguir, vamos ver exemplos de como o polimorfismo pode ser alcan\u00e7ado em C# atrav\u00e9s de heran\u00e7a e interfaces.<\/p>\n\n\n\n<p>Exemplo de polimorfismo de subtipos usando heran\u00e7a:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System;\n\npublic class Animal\n{\n    public virtual void FazSom()\n    {\n        Console.WriteLine(\"O animal faz um som\");\n    }\n}\n\npublic class Cachorro : Animal\n{\n    public override void FazSom()\n    {\n        Console.WriteLine(\"O cachorro late\");\n    }\n}\n\npublic class Gato : Animal\n{\n    public override void FazSom()\n    {\n        Console.WriteLine(\"O gato mia\");\n    }\n}\n\npublic class Program\n{\n    public static void Main()\n    {\n        Animal[] animais = new Animal[3];\n        animais [0] = new Animal();\n        animais [1] = new Cachorro();\n        animais [2] = new Gato();\n\n        foreach (Animal animal in animals)\n        {\n            animal.FazSom();\n        }\n    }\n}<\/pre>\n\n\n\n<p>Neste exemplo, temos uma classe base&nbsp;Animal&nbsp;que define um m\u00e9todo virtual&nbsp;FazSom(). As classes derivadas&nbsp;Cachorroe&nbsp;Gato&nbsp;substituem o m\u00e9todo&nbsp;FazSom()&nbsp;da classe base e fornecem suas pr\u00f3prias implementa\u00e7\u00f5es.<\/p>\n\n\n\n<p>Na classe&nbsp;Program, criamos um array de objetos&nbsp;Animal. Os elementos desse array podem ser objetos da classe&nbsp;Animal,&nbsp;Cachorro ou&nbsp;Gato. Ao chamar o m\u00e9todo&nbsp;FazSom()&nbsp;em cada objeto, a implementa\u00e7\u00e3o apropriada \u00e9 chamada de acordo com o tipo de objeto.<\/p>\n\n\n\n<p>Exemplo de polimorfismo de interface usando interfaces:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System;\n\npublic interface IFormato\n{\n    void Desenhar();\n}\n\npublic class Circulo: IFormato\n{\n    public void Desenhar()\n    {\n        Console.WriteLine(\"Desenhando um c\u00edrculo\");\n    }\n}\n\npublic class Retangulo: IFormato\n{\n    public void Desenhar()\n    {\n        Console.WriteLine(\"Desenhando um ret\u00e2ngulo\");\n    }\n}\n\npublic class Program\n{\n    public static void Main()\n    {\n        IFormato[] formatos = new IFormato[2];\n        formatos[0] = new Circulo();\n        formatos[1] = new Retangulo();\n\n        foreach (IFormato formato in formatos )\n        {\n            formato.Desenhar();\n        }\n    }\n}<\/pre>\n\n\n\n<p>Neste exemplo, temos uma interface&nbsp;IShape&nbsp;que define um m\u00e9todo&nbsp;Draw(). As classes&nbsp;Circle&nbsp;e&nbsp;Rectangle&nbsp;implementam a interface&nbsp;IShape&nbsp;e fornecem suas pr\u00f3prias implementa\u00e7\u00f5es do m\u00e9todo&nbsp;Draw().<\/p>\n\n\n\n<p>Na classe&nbsp;Program, criamos um array de objetos&nbsp;IFormatos. Os elementos desse array podem ser objetos das classes&nbsp;Circuloou&nbsp;Retangulo. Ao chamar o m\u00e9todo&nbsp;Desenhar()&nbsp;em cada objeto, a implementa\u00e7\u00e3o apropriada \u00e9 chamada de acordo com o tipo de objeto.<\/p>\n\n\n\n<p>O polimorfismo de interface \u00e9 \u00fatil em situa\u00e7\u00f5es em que uma classe pode implementar v\u00e1rias interfaces e, portanto, ter v\u00e1rios comportamentos diferentes. Isso permite que as classes sejam mais flex\u00edveis e reutiliz\u00e1veis em diferentes contextos.<\/p>\n\n\n\n<p><strong>Conclus\u00e3o:<\/strong><\/p>\n\n\n\n<p>O polimorfismo \u00e9 uma t\u00e9cnica poderosa na programa\u00e7\u00e3o orientada a objetos que permite que um objeto se comporte de diferentes maneiras em diferentes contextos. Em C#, o polimorfismo pode ser alcan\u00e7ado atrav\u00e9s do uso de heran\u00e7a e interfaces. O polimorfismo de subtipos usa a heran\u00e7a para permitir que as classes derivadas substituam m\u00e9todos da classe base, enquanto o polimorfismo de interface usa interfaces para permitir que as classes implementem v\u00e1rios comportamentos diferentes. O polimorfismo \u00e9 uma parte fundamental da programa\u00e7\u00e3o orientada a objetos e \u00e9 uma t\u00e9cnica importante para escrever c\u00f3digo flex\u00edvel e reutiliz\u00e1vel.<\/p>\n<p>Views: 1<\/p>","protected":false},"excerpt":{"rendered":"<p>O polimorfismo \u00e9 um dos princ\u00edpios fundamentais da programa\u00e7\u00e3o orientada a objetos e \u00e9 uma t\u00e9cnica que permite que um [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":380,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[49],"tags":[62,63,65],"class_list":["post-189","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacao","tag-c","tag-orientacao-objetos","tag-polimorfismo"],"_links":{"self":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts\/189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=189"}],"version-history":[{"count":0,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts\/189\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/media\/380"}],"wp:attachment":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=189"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}