Baixe o app para aproveitar ainda mais
Prévia do material em texto
PARADIGMAS DE PROGRAMAÇÃO Fabricio Machado da Silva Programação orientada a objetos: modelagem de problemas Objetivos de aprendizagem Ao final deste texto, você deverá apresentar os seguintes aprendizados: � Definir programação orientada a objetos. � Identificar as linguagens orientadas a objetos. � Aplicar a programação orientada a objetos. Introdução A programação orientada a objetos (POO) surgiu como um paradigma que apresentava uma disciplina para novos projetos de desenvolvimento de software. Etapas com análise e projeto de software que, em outros paradigmas, acabavam sendo minimizados na POO, se tornam requisitos fundamentais. Não é difícil imaginar que a POO acabou se tornando um padrão con- sumido pela engenharia de software e que possibilitou avanços significati- vos na programação de computadores. Seu uso permitiu que reutilização de código se tornasse algo praticamente comum em desenvolvimento de software, servindo como base para novos conceitos, como os serviços. Neste capítulo, você entenderá o conceito de POO, conhecerá al- gumas linguagens que implementam esse paradigma e exemplos de aplicação em projetos de programas de computador. Programação orientada a objetos O conceito de POO tem suas raízes na linguagem de programação Simula 67, criada por Alan Kay, o precursor dos conceitos desse paradigma de programa- ção. Contudo, sua grande evolução foi totalmente alcançada com a chegada da linguagem de programação Smalltalk 80: De fato, algumas pessoas consideram Smalltalk o modelo base para uma linguagem de programação puramente orientada a objetos. Uma linguagem orientada a objetos deve fornecer suporte para três recursos chave de lingua- gem: tipos de dados abstratos, herança e vinculação dinâmica de chamadas a métodos (SEBESTA, 2018, p. 547). Linguagens que suportam a POO são, atualmente, muito usadas. Algumas das linguagens de programação mais novas, projetadas para a POO, não implementam mais conceitos de linguagens procedurais como as primei- ras implementavam. Porém, ainda assim, empregam estruturas básicas da programação estruturada e são imperativas, como as linguagens Java e C#, atualmente muito utilizadas e consideradas exemplos de sucesso de POO. Smalltalk 80 foi primeira linguagem a implementar completamente os conceitos da POO, pois, em 1980, mesmo com a evolução dos módulos e pacotes pelas linguagens de programação da época, os problemas ainda persistiam. Um dos maiores problemas com os recursos atuais era que não existia mecanismo para inicialização e finalização automática do tipo fornecido. Segundo Tucker e Noonan (2009, p. 307) “As inicializações normalmente necessárias incluem abertura de um arquivo, alocação de memória e inicialização de variáveis locais ao módulo”. Já quanto às finalizações, incluem o fechamento de arquivos e a liberação de memória. Além disso, alguns programadores e projetistas começaram a perceber que algumas necessidades não eram atendidas com as atuais linguagens de programação imperativa de decomposição funcional e abstração de dados, como os padrões de graphical user interfaces (GUI), que poderiam ser melhor implementadas com o conceito de objetos que pudessem trocar mensagens uns com os outros. Uma GUI poderia ser mais facilmente implementada se considerarmos, por exemplo, que seus componentes (botões, áreas de texto, imagens etc.) são tratados como objetos que podem interagir entre si e com o usuário do sistema. Programação orientada a objetos: modelagem de problemas2 Assim, a POO surge como um paradigma centrado no desenvolvimento de objetos, no lugar da atual decomposição funcional e abstração de dados. Na Figura 1, você pode perceber um pouco dessa diferença entre a atual programação estruturada e o conceito de objetos. Figura 1. Comparativo entre programação estruturada e objetos. Fonte: Adaptada de Gasparotto (2014). ... ... ... ... ... Dados globais Programação estruturada Procedimento Procedimento Procedimento Procedimento Procedimento Dados objeto Dados objeto Dados objeto POO Método Método Método Método Método Método Em uma linguagem de POO, o encapsulamento dos tipos de dados e suas funções é alcançado por meio da implementação das classes. Uma classe é uma declaração de um tipo de objeto que encapsula os seus tipos de dados pelos seus atributos e funções por meio de seus métodos. É comum ouvir falar que uma classe serve como uma matriz de objetos, pois, ao determinar os seus atributos e métodos, serve como um modelo para que diversas instâncias de um objeto sejam criadas a partir de sua estrutura. Ao analisar a Figura 1, você pode perceber que um programa em progra- mação estrutural possui um desempenho melhor que um mesmo programa em POO, e isso ocorre pelo fato de, na programação estruturada, um código ser executado após o outro sequencialmente, ao passo que na POO são ne- cessários alguns desvios. Entretanto, a POO traz outros pontos que acabam sendo mais interessantes no contexto de aplicações modernas. Como, na maioria das aplicações, o desempenho das aplicações não é uma das grandes preocupações (devido ao poder de processamento dos computadores atuais), a POO se tornou muito difundida. 3Programação orientada a objetos: modelagem de problemas Na próxima seção, vamos abordar como as linguagens Java, C# e Python implementam os conceitos da POO. Essas linguagens serão exemplos por serem muito utilizadas atualmente no contexto de desenvolvimento de software. Linguagens orientadas a objetos Agora, você entenderá um pouco sobre as linguagens Java, C# e Python, atualmente muito utilizadas e que implementam os conceitos da POO. Java é uma linguagem de programação que foi desenvolvida pela Sun Microsystems no início da década de 1990. Ela se tornou um símbolo da POO, inclusive causando certa confusão, por julgarem que a POO era um paradigma de Java e não ao contrário (MACHADO; FRANCO; BERTAGNOLLI, 2016, p. 54). De fato, a característica mais marcante da linguagem de programação Java está relacionada a sua portabilidade, pois os sistemas construídos não são compilados em código nativo da plataforma. Programas em Java são compilados para um bytecode, que é executado por uma máquina virtual, a Java virtual machine, que permite que os programas escritos em Java possam ser rodados em qualquer plataforma compatível com a sua máquina virtual. Em Java, todo o programa usa classes e objetos, e é fundamental que o programador compreenda esses conceitos da POO para conseguir programar em Java. Os programas são escritos em pequenos pedaços separados, chamados de objetos. Segundo Machado, Franco e Bertagnolli (2016, p. 78), “Objetos são pequenos programas que guardam dentro de si os dados — em suma, as variáveis — que precisam para executar suas tarefas”. Os objetos também trazem em si, como sub-rotinas, as instruções para processar esses dados. As variáveis que um objeto guarda são chamadas de atributos, e as suas sub- -rotinas são chamadas de métodos. Programação orientada a objetos: modelagem de problemas4 Veja o exemplo de uma classe Cachorro em Java com os atributos nome, peso, altura e cor e o método pular(). public class Cachorro{ public String nome; public float peso; public float altura; public String cor; void pular{ if(altura>=80){ System.out.println("Seu Cachorro pula alto"); } } } Como você pode observar, a programação em Java é praticamente regrada pelos conceitos de POO, e as classes são a base de qualquer código Java. Qualquer análise para um novo programa em Java deve partir do entendimento do seu contexto e projeção das classes. Agora, vamos analisar a linguagem C#. A linguagem C# (lê-se C Sharp) é definida pela Microsoft, que a desenvolve como uma linguagem de POO que faz parte de sua plataforma de desenvolvimento .NET. Embora a lingua- gem C# tenha sido criada totalmente do zero pela Microsoft, foi baseada na linguagem C++, e possui muitos elementos daslinguagens Java e Pascal. A plataforma .NET na qual teve seu desenvolvimento inicial, apresentou algumas limitações que motivaram que, em 1999, fosse montada uma força tarefa para o desenvolvimento de uma nova linguagem para essa plataforma. Segundo Ledur (2018, p. 108): A criação da linguagem C# ajudou muito no desenvolvimento do .NET, pois a plataforma não precisou se adequar a nenhum código de alguma linguagem já existente. O C# foi criado especificamente para .NET, sendo que muitas outras linguagens têm suporte à C#. 5Programação orientada a objetos: modelagem de problemas Os principais objetivos do projeto da linguagem C# são: � Ser simples moderna e de propósito geral OO. � Ter uma linguagem e suas implementações que forneçam suporte para princípios de engenharia de software. � Ser destinada à utilização no desenvolvimento de componentes de software. � Possibilitar a portabilidade dos programas escritos em C#, assim como é possível na linguagem Java. � Fornecer suporte para a escrita de programa, tanto hospedados local- mente como incorporados. A Figura 2 mostra um exemplo da estrutura de uma classe em C#. Figura 2. Exemplo da estrutura de uma classe em C#. Fonte: Rodrigues (2017, documento on-line). Você pode perceber que, assim como em Java, C# possui uma estrutura semelhante com a declaração dos atributos da classe logo no início e depois em seus métodos, além de uma semelhança na sintaxe entre as duas linguagens, o que é explicado devido ao embasamento do C# na linguagem Java. Programação orientada a objetos: modelagem de problemas6 Para finalizar esta seção, vamos abordar a POO na linguagem de progra- mação Python, que é uma linguagem de programação bastante utilizada por sua facilidade de aprendizado, aliada as suas características de programação de alto nível, de script, imperativa, OO e interpretada. Python é uma linguagem que permite o desenvolvimento tanto no conceito de programação estruturada como a POO. Possui suporte a tipificação dinâ- mica, recursos de gerenciamento de uso de memória, além de oferecer uma abrangente biblioteca padrão. Os interpretadores Python possuem suporte para diversos sistemas operacionais, possibilitando a adaptação dos sistemas construídos. A origem do nome Python, apesar de confundido com o animal cobra, na realidade é oriunda do grupo de comédia britânico que era assistido pelo criador da linguagem, chamado Monty Python, formado por Graham Cha- pman, John Cleese, Eric Idle, Michael Palin, Terry Jones e Terry Gilliam. Carinhosamente, são chamados de Pythonistas os programadores Python, e as referências aos trabalhos do grupo de comédia estão espalhadas pelos tutoriais e sua documentação (LUTZ; ASCHER, 2007). Python é uma linguagem muito simples, fácil de usar e aprender, apesar disso, também é uma linguagem extremamente robusta e utilizada nas mais diversas soluções: � back-end de sistemas Web, customer relationship management (CRM), ou gerenciamento de relacionamento com o cliente; � pesadas simulações de engenharia; � processamento pesado de efeitos especiais de filmes; � soluções de análise de dados (data analytics); � aprendizado de máquina, do inglês machine learning (ML). Veja o exemplo de uma classe Pessoa em Python. class Pessoa: def _ init _ (self, nome, idade): self.nome = nome self.idade = idade def setNome(self, nome): self.nome = nome 7Programação orientada a objetos: modelagem de problemas def setIdade(self, idade): self.idade = idade def getNome(self): return self.nome def getIdade(self): return self.idade Apesar da sintaxe do Python ser um pouco diferente da sintaxe de Java e C#, é possível verificar a estrutura da classe com a definição de atributos e métodos e que Python é outro exemplar de linguagem OO. Na próxima seção, você verá alguns exemplos da aplicação da programação OO em classes de exemplos, para fixar o entendimento. Desenvolvendo com programação orientada a objetos Para ajudar a elucidar o conceito de POO, vamos começar analisando a se- guinte situação: um exemplo em Java que demonstra a criação da classe Pessoa com os atributos nome, dataNascimento e CPF; e o método tirarCopias, que calcula o custo da geração de cópias em um sistema de gestão de impressões de uma escola. Esse sistema deve calcular o valor da cópia embasado na seguinte regra: � para alunos da escola, o valor unitário da cópia será de R$ 0,07; � para os demais usuários, o valor unitário será de R$ 0,10. A diferença é que este requisito será implementado com os seguintes conceitos da POO: � classes; � heranças. Programação orientada a objetos: modelagem de problemas8 Observe na Figura 3, onde consta a classe Pessoa. Figura 3. Classe Pessoa em Java. Fonte: Geovane (2012, documento on-line). Na classe Pessoa podemos observar os seguintes atributos: � nome; � cpf; � data_nascimento. Observamos, também, que essa classe possui o método tirarCopias, que faz o cálculo do valor da cópia para pessoas em geral, ou seja, pessoas que não são alunos. Porém, você pode estar se perguntando, onde estão os dados do aluno e o método que faz o cálculo do valor da cópia quando se trata de um aluno? Esses dados estão na classe Aluno, mas, como o Aluno também é uma pessoa e tem alguns atributos que são comuns as demais pessoas, não vamos repetir na classe Aluno. A Figura 4 mostra como ficaria a classe Alunos em Java. 9Programação orientada a objetos: modelagem de problemas Figura 4. Classe Alunos em Java. Fonte: Geovane (2012, documento on-line). É possível, portanto, observar que no início da classe Aluno existe a declaração extends. Essa declaração significa que a classe Aluno está dizendo que herda a classe Pessoa, dessa forma, os atributos que são comuns à classe Pessoa não necessitam ser repetidos. Além disso, percebe-se que a classe Aluno possui o atributo matrícula, que é específico do Aluno. Por fim, veja que, na classe Aluno, o método tirarCopias é alterado de acordo com o valor específico para os Alunos, o que é possível em razão de um outro recurso de POO: o polimorfismo. Polimorfismo é um recurso que permite ao objeto ter um comportamento diferente, dependendo da situação. Nesse caso, o cálculo do valor da cópia se altera por conta da situação de desconto de aluno. Pelos exemplos apresentados, percebe-se na prática alguns recursos e usos da programação OO e seus benefícios para a programação, possibilitando, principalmente, a reutilização do código. Conceitos como os observados nos exemplos das Figuras 3 e 4 são casos comuns em POO, por isso é importante todo programador conseguir abstrair classes com seus atributos e métodos separados e, quando utilizar conceitos bases da POO, como herança de classes, evitar reutilização de código. Programação orientada a objetos: modelagem de problemas10 GASPAROTTO, H. M. Os 4 pilares da Programação Orientada a Objetos. DevMedia, Rio de Janeiro, 2014. Disponível em: https://www.devmedia.com.br/os-4-pilares-da- -programacao-orientada-a-objetos/9264. Acesso em: 15 set. 2019. GEOVANE, H. Entendendo e Aplicando Herança em Java. DevMedia, Rio de Janeiro, 2012. Disponível em: https://www.devmedia.com.br/entendendo-e-aplicando-heranca-em- -java/24544. Acesso em: 15 set. 2019. LEDUR, C. L. Desenvolvimento de sistemas com C#. Porto Alegre: SAGAH, 2018. 268 p. LUTZ, M.; ASCHER, D. Aprendendo Python. 2. ed. Porto Alegre: Bookman; O’Reilly, 2007. 566 p. MACHADO, R. P.; FRANCO, M. H. I.; BERTAGNOLLI, S. C. Desenvolvimento de software III: programação de sistemas web orientada a objetos em Java. Porto Alegre: Bookman, 2016. 220 p. (Série Tekne; Eixo Informação e Comunicação). RODRIGUES, J. Como criar minha primeira classe em C#. DevMedia, Rio de Janeiro, 2017. Disponível em: https://www.devmedia.com.br/como-criar-minha-primeira-classe-em- -csharp/38785. Acesso em: 15 set. 2019. SEBESTA,R. W. Conceitos de linguagem de programação. 11. ed. Porto Alegre: Bookman, 2018. 758 p. TUCKER, A. B.; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2. ed. Porto Alegre: AMGH, 2009. 630 p. Leituras recomendadas EDELWEISS, N.; LIVI, M. A. C. Algoritmos e programação: com exemplos em Pascal e C. Porto Alegre: Bookman, 2014. 476 p. (Série Livros Didáticos Informática UFRGS). MILETTO, E. M.; BERTAGNOLLI, S. C. Desenvolvimento de software II: introdução ao de- senvolvimento web com HTML, CSS, JavaScript e PHP. Porto Alegre: Bookman, 2014. 276 p. (Série Tekne; Eixo Informação e Comunicação). NICOLETTI, M. C. A cartilha Prolog. São Carlos: Edufscar, 2003. 124 p. (Série Apontamentos). OKUYAMA, F. Y.; MILETTO, E. M.; NICOLAO, M. Desenvolvimento de software I: conceitos bá- sicos. Porto Alegre: Bookman, 2014. 236 p. (Série Tekne; Eixo Informação e Comunicação). PINHEIRO, F. A. C. Elementos de programação em C: em conformidade com o padrão ISO / IEC 9899. Porto Alegre: Bookman, 2012. 548 p. 11Programação orientada a objetos: modelagem de problemas
Compartilhar