Baixe o app para aproveitar ainda mais
Prévia do material em texto
- -1 Requisitos básicos das linguagens orientada a objetos Georgia Maria Ferro Benetti Introdução Você já pensou sobre o modo como os sistemas computacionais trabalham para resolver problemas do mundo real? A Programação Orientada a Objetos (POO) é um paradigma de programação que pretende desenvolver representações fidedignas de situações do mundo real em sistemas computacionais. Assim, é um modo de desenvolver programas e um conjunto de linguagens baseados em princípios e conceitos-chave característicos e bem definidos. Diante disso, você sabe quais são eles? Neste tema, vamos estudá-los e compreender como as ideias de abstração, polimorfismo, herança e encapsulamento determinam diretrizes de programação. Ao conhecer os fundamentos básicos da POO, você compreenderá como as linguagens de programação podem ser empregadas como recursos para a construção de Sistemas de Informação (FOINA, 2012). Abstração A abstração é um ponto crucial em um projeto de software, por isso, os desenvolvedores podem investir muito tempo das suas horas de trabalho elaborando abstrações (TUCKER; NOONAN, 2010). Dessa maneira, o papel fundamental da abstração na POO está relacionado com o fato pelo qual, ao desenvolver um software, não estamos lidando com objetos reais e, sim, com representações de objetos dos quais precisaremos imaginar o comportamento dentro do sistema em questão. Objeto é um conceito tão importante na POO que dá nome ao paradigma, sendo, então, antes da realidade representados em ambiente de programação (DEITEL; DEITEL, 2011), os quais interagem entre si e têm estados específicos (informações) e acessam um conjunto de operações (comportamentos), podendo ou não ser alterados nessa interação. Em computação, as abstrações podem ser do tipo procedural ou de dados e são particularmente úteis na reutilização de código. - -2 A abstração procedural é um elemento do paradigma de programação imperativa que determina o uso de funções matemáticas pré-definidas, no qual o desenvolvedor de foco, para trabalhar na interface entre a função e o que calcula, não se preocupar com os detalhes do cálculo (TUCKER; NOONAN, 2010). Já a é um conceito anterior a POO, uma extensão da abstração procedural, fundamentalabstração de dados para o desenvolvimento no paradigma orientado a objetos. Sua finalidade é reunir tipos de dados e suas funções em um módulo único, para que provenham uma interface pública (TUCKER; NOONAN, 2010). De acordo com Sebesta (2011, p. 506-507), tipos de dados são: [...] declarações do tipo e os protocolos das operações em objetos do tipo, que fornecem sua interface, são contidos em uma única unidade sintática. A interface do tipo não depende da representação dos objetos ou da implementação das operações. A implementação do tipo e de suas operações podem estar na mesma unidade sintática ou em uma unidade separada. Além disso, outras unidades de programa podem criar variáveis do tipo definido. […] A principal vantagem de empacotar as declarações do tipo e suas operações em uma única unidade sintática é fornecer um método de organizar um programa em unidades lógicas possíveis de serem compiladas separadamente. (SEBESTA, 201,1 p. 506-507). Compreender como funciona a abstração e o quais são os objetos é fundamental para trabalhar com POO, pois o seu recurso de dados se utiliza para incluir objetos em um domínio de software (STROUSTRUP, 2013). Para entender como um conjunto de dados abstratos constitui um objeto, precisaremos avançar para o próximo subtópico e apreender como funciona o encapsulamento de dados. Encapsulamento Encapsulamento pode ser descrito como “[...] um mecanismo que permite que constantes logicamente relacionadas, tipos, variáveis, métodos, entre outros, sejam agrupados em uma nova entidade. Exemplos incluem procedimentos, pacotes e classe” (TUCKER; NOONAN, 2010, p. 310). Desse modo, um objeto encapsulado é um conjunto de atributos e operações organizado em um bloco fechado que oculta os aspectos mais complexos de programação e só mostra o estritamente necessário (detalhes de implementação ou lógica de método), com o objetivo de existir comunicação com um outro objeto. Assim, configuram-se dois elementos chave da POO: • Classe: conjunto de objetos com estrutura de características (atributos) e comportamentos (métodos) similares, baseada em um objeto modelo; • Instância de classe: objetos derivados do modelo, mas que armazenam dados e executam operações. FIQUE ATENTO Existem diversas bibliotecas de abstrações já construídas que estão disponíveis para novas implementações, como, por exemplo, “[...] as bibliotecas de classes Java contêm implementações de estruturas de dados básicos (como vetores e pilhas) que, em linguagens anteriores, tinham de ser projetadas explicitamente pelos próprios programadores” (TUCKER; NOONAN, 2010, p. 17). • • - -3 • Instância de classe: objetos derivados do modelo, mas que armazenam dados e executam operações. Na prática, as classes criadas por encapsulamento dão uma característica a POO, em que as operações contidas nelas podem ser utilizadas sem compreender detalhadamente como estão programadas nem como funcionam. Então, se um programa é desenvolvido com POO, ele não vai ser um bloco único, mas, sim, uma composição de várias partes pequenas, de implementação independente e que se relacionam por interfaces, cuja autonomia é garantida pelo encapsulamento. O encapsulamento é, portanto, um recurso que preserva os dados da classe, cujo acesso só poderá se dar via métodos particulares e com tipos de autorização de acesso bem específicos. Os principais tipos de acesso estão representados no Quadro 1, a seguir. Quadro 1 - Tipos de método de acesso Fonte: Elaboração da autora. O encapsulamento é um expediente, o qual permite que os objetos se liguem uns aos outros para utilizá-los. As vantagens do encapsulamento estão indicadas no Quadro 2, abaixo. • EXEMPLO Como um exemplo bem simplificado, podemos ter a classe casaco com os atributos cor e tamanho, a partir da qual são instanciados (criados novos objetos) a instância de classe casaco , tamanho médio, e o , . Mas prestede lã preto casaco de neoprene azul tamanho extragrande atenção, o exemplo é simplificado, para criar uma classe de modo adequado é preciso especificar o máximo de atributos que o objeto pode conter, pois sabemos que um casaco pode conter outros atributos como marca, preço e assim por diante. - -4 Quadro 2 - Vantagens do encapsulamento. Fonte: Elaboração da autora. Herança Herança é uma técnica de programação a qual permite reaproveitamento integral de código, sendo, então, um tipo de relação entre classes que se alinham a uma classe geral e uma derivada dela como caso especial. Por meio de herança, todos os atributos e métodos da classe geral serão transferidos automaticamente para a classe descendente sem que seja preciso desenvolver o código contido na classe geral novamente. Uma classe mais complexa é, então, definida bastando implementar apenas métodos e atributos complementares. A herança é uma analogia a hereditariedade humana, logo possui hierarquia de descendência, conforme indicado no Quadro 3. Quadro 3 - Hierarquia de Herança. Fonte: Elaborado pela autora, com base em Tucker e Noonan (2010). Essa característica da herança configura uma das suas desvantagens: a dependência entre classes. Nessa FIQUE ATENTO Em POO, as informações características de um objeto se chamam ; e as ações e osatributos eventos relacionados aos objetos se chamam . Este último é o único modo de alterar ométodos estado interno de um objeto. Em vista disso, um objeto pode disponibilizar vários métodos e o conjunto deles se chama .interface - -5 Essa característica da herança configura uma das suas desvantagens: a dependência entre classes. Nessa perspectiva, existem dois tipos de herança, como indicados no Quadro 4, a seguir. Quadro 4 - Tipos de Herança Fonte: Elaborado pela autora, com base em Tucker e Noonan (2010). Polimorfismo É uma propriedadedos objetos de responder a mesma mensagem de modos diferentes. Isto é, o objeto comporta- se de modo diferente diante de ações idênticas. Como exemplo, vamos supor que temos a classe nadar, mas cada nadador vai “implementar” o método a sua maneira, uns nadarão no estilo crawl, outros no estilo costas ou, ainda, no livre. Equivale a dizer que os objetos podem interpretar os métodos de modos particulares. Nesse sentido, o polimorfismo aplica-se às instâncias de classe. Exemplos de linguagens orientadas a objetos Existem muitas linguagens de programação orientadas a objetos. Posto isso, neste tópico seguiremos a seleção de três linguagens, Smalltalk, Java e Python, estabelecidas por Tucker e Noonan (2010), apresentadas, resumidamente, no Quadro 4. SAIBA MAIS Alguns modelos de linguagens com suporte a polimorfismo, chamadas de polimórficas, podem ser: Actionscript, Java, C++. Existem diferentes tipos de polimorfismo, para saber mais acesse o artigo “Conheça 6 tipos de polimorfismo”, disponível em: <https://medium.com/@victorvoid >./6-tipos-de-polimorfismo-7787080e8857 https://medium.com/@victorvoid/6-tipos-de-polimorfismo-7787080e8857 https://medium.com/@victorvoid/6-tipos-de-polimorfismo-7787080e8857 - -6 Quadro 5 - Linguagens de programação orientadas a objetos. Fonte: Elaborado pela autora, com base em Tucker e Noonan (2010). Fechamento Nesse tema, estudamos como os conceitos chave da POO são transformados em recursos de programação. Aprendemos, a partir da abstração se compõem objetos, que, por encapsulamento, configuram-se em classes e instâncias de classe. Dessa forma, as classes permitem utilizar a propriedade de herança, possibilitando reuso de código. Portanto, existem várias linguagens orientadas a objetos e as características comuns entre elas são: comportar encapsulamento de tipos de dados e funções em uma única estrutura de código, de modo a esconder a maneira como a abstração de dados está constituída. - -7 como a abstração de dados está constituída. Referências DEITEL, H. M.; DEITEL, P. J. how to program. C++: 8. ed. New York: Prentice-Hall, 2011. FOINA, P. R. : planejamento e gestão. São Paulo: Atlas, 2012.Tecnologia de informação IGOR, V. Conheça 6 tipos de polimorfismo. , 16 jan. 2017. Disponível em: <Medium https://medium.com >/@victorvoid/6-tipos-de-polimorfismo-7787080e8857 . Acesso em: 4 de fev. 2019. SEBESTA, R. W. . Tradução de Eduardo Kessler Piveta. Conceitos de linguagens de programação 9. ed. Porto Alegre: Bookman, 2011. STROUSTRUP, B. . 4. ed. Boston: Addison-Wesley Professional, 2013.The C++ Programming Language TUCKER, A.; NOONAN, R. princípios e paradigmas. São Paulo: AMGH, 2010.Linguagens de Programação: https://medium.com/@victorvoid/6-tipos-de-polimorfismo-7787080e8857 https://medium.com/@victorvoid/6-tipos-de-polimorfismo-7787080e8857 Introdução Abstração Encapsulamento Tipos de método de acesso Vantagens do encapsulamento. Herança Hierarquia de Herança. Tipos de Herança Polimorfismo Exemplos de linguagens orientadas a objetos Linguagens de programação orientadas a objetos. Fechamento Referências
Compartilhar