Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 / 41 Trabalho programação I Prof: Newton Programação orientada a objetos 2 / 41 Alunos: ● Willamis Rodrigues ● David Laurindo ● Caiã Augusto ● Matheus ● Antonio Ermeson 3 / 41 Introdução ● Conceito de Programação Orientada a Objetos ● Vantagens e desvantagens da POO. ● Relação dos conceitos de Classe X Objetos. ● Exemplo de Programação com a POO. ● Princípios da POO, Encapsulamento, Herança e Polimorfsmo. 4 / 41 Conceito de programação Orientada a Objeto 5 / 41 Trata-se de um paradigma de programação relativamente recente, que se baseia fundamentalmente no conceito de Objetos. É uma forma de desenvolvimento de sistemas de software que o trata como um conjunto de componentes que interagem entre si para resolver um problema. Esses componentes são denominados Objetos. 6 / 41 * Objetos Os objetos são a base da Orientação a Objetos. Os objetos representam entidades do mundo real, como cliente, agencias, contas correntes, etc. Um objeto possui características próprias (atributos) e executa determinadas ações (métodos), sendo esses atributos e métodos provenientes da classe que origina o objeto. 7 / 41 8 / 41 * Abstração Abstrair signifca selecionar aspectos específcos de um problema a ser analisado, deixando de lado outros aspectos. É a representação de uma entidade do mundo real na forma de ideias. 9 / 41 * Mensagem Os objetos se comunicam a partir da troca de mensagens. Uma mensagem é um sinal enviado de um objeto a outro, o qual requisita um serviço, usando uma operação programada no objeto chamado. Por exemplo, para que um objeto execute um método, é necessário enviar a este objeto uma mensagem solicitando a execução do método desejado 10 / 41 11 / 41 * Classes Uma Classe é uma coleção de objetos que são descritos com os mesmos atributos e as mesmas operações. Uma classe representa uma idéia ou conceito e classifca objetos que tenham propriedades similares. Uma classe é como se fosse um tipo abstrato de dados, um “molde” para a criação de objetos. As classes possuem atributos e métodos. Atributos são características da classe, que são comuns a todos os objetos derivados, e que podem apresentar valores diversos. Já os Métodos são as operações possíveis em uma classe (nos objetos instanciados a partir dela) . 12 / 41 * Atributo de Classe Característica particular de uma ocorrência de uma classe, como por exemplo o nome e a idade de uma pessoa. Existem dois tipos principais de propriedades: - Estáticas: Mantém o mesmo valor durante toda a sua existência. Por exemplo, a data de nascimento de uma pessoa é uma propriedade estática, pois mantém o mesmo valor durante toda a existência do objeto instanciado. - Dinâmicas: Podem ter valores que variam com o passar do tempo. A idade de uma pessoa pode ser considerada um atributo dinâmico, pois pode variar ao longo do tempo. 13 / 41 * Métodos É a lógica contida em uma classe para atribuir-lhe comportamentos. São as funções e procedimentos contidos na classe. O ato de invocar um método é a passagem de mensagens para o objeto. Um método possui um nome e um corpo onde fcam os comandos que serão executados quando o método for chamado, e também podem receber dados para processamento (parâmetros) e retornar informações. Os métodos são a forma principal de passagem de mensagens entre objetos. Os métodos também precisam ter um tipo de retorno, que pode ser um tipo de valor, de referência ou ainda void (não retornam valor). 14 / 41 * Instancia de um a Classe É o objeto, uma ocorrência específca de uma classe. As classes originam instâncias sob requisição, no processo denominado Instanciação. O projetista / analista cria a classe. A classe é então usada para criar objetos em tempo de execução. Veja a seguir um exemplo de criação de classe na linguagem C# . 15 / 41 Vantagens e desvantagens de trabalhar com POO 16 / 41 História Nos anos 60 é lançado a Simula-67 que apresentou pela primeira vez os conceitos de classes, rotinas correlatas e subclasses. Na década de 70 a Seros-PARC cria a Smalltak até hoje considerada a mais pura das LPOO. No fnal da década de 80 aparece a C++, uma linguagem híbrida. Orientação a Objetos é o maior avanço em software destes últimos anos. É uma forma mais natural de se analisar o mundo. Ela nos permite construir sistemas melhores e, além disso, de maneira mais fácil. Será a mais importante das tecnologias emergentes na área de software nos anos 90. As técnicas estruturadas que, sem dúvida, atualmente são as mais populares na comunidade de informática, obtiveram grande aceitação desde que foram lançadas no fnal dos anos 70. Contudo a medida que foram sendo utilizadas, a decomposição funcional mostrou-se inadequada em situações de sistemas complexos e principalmente para profssionais iniciantes. Os aperfeiçoamentos introduzidos em 1984, por Sthephen M e John F Palmer e, mais tarde, complementados por Stephen Mellor e Paul Ward, para sistemas em real-time, ajudaram a análise estruturada a se tornar mais efciente. Contudo os sistemas criados com as técnicas estruturadas ainda são difíceis de serem incrementados com novas funções e as alterações em funções já existentes, muitas vezes, provocam sérios problemas em outras partes do software. 17 / 41 A reutilização A reutilização está baseada na padronização a qual é adotada há longa data em toda a indústria moderna, seja no projeto de carros, televisores, computadores, etc. A padronização traz inúmeras vantagens, entre elas podemos citar a seguintes: 18 / 41 1 as peças padrões são mais baratas 2 são mais confáveis 3 geralmente são mais fáceis de serem consertadas ou substituídas Na informática a reutilização de códigos ainda é praticada em escala muito reduzida e decorrente da iniciativa isolada de alguns programadores e projetistas. São vários os motivos para isso, entre eles: 19 / 41 1 existência de uma Biblioteca e de um Sistema de Catálogo 2 facilidade para documentação 3 sistemática rigorosa para testes 4 novas técnicas para especifcação de sistemas tendo em vista a reutilização de módulos 5 linguagem, ferramentas e ambientes de desenvolvimento que estimulem a adoção, em larga escala, de tais métodos dentro das empresas 6 criação de novos geradores de sistemas que operem selecionando e combinando módulos padrões e que satisfaçam as necessidades específcas das aplicações 7 mudança administrativas e gerenciais nas empresas de modo a apoiarem e estimularem os criadores de módulos padrões. 20 / 41 Vantagens da Orientação a Objeto ● Vantagens Diretas – maior facilidade para reutilização de código e por consequência do projeto – possibilidade do desenvolvedor trabalhar em um nível mais elevado de abstração – utilização de um único padrão conceitual durante todo o processo de criação de software – maior adequação à arquitetura cliente/servidor – maior facilidade de comunicação com os usuários e com outros profssionais de informática. ● Vantagens Reais – ciclo de vida mais longo para os sistemas – desenvolvimento acelerado de sistemas – possibilidade de se construir sistema muito mais complexos, pela incorporação de funções prontas – menor custo para desenvolvimento e manutenção de sistemas 21 / 41 Desvantagens ● Complexidade no aprendizado para desenvolvedores de linguagens estruturadas ● Maior uso de memória (heap), por exemplo para aplicações móveis em JavaME ● Maior esforço na modelagem de um sistema OO do que estruturado (porém menor esforço de codifcação, sendo uma vantagen) ● Funcionalidades limitadaspor interface, quando estas estão incompletas (problemas na modelagem) ● Dependência de funcionalidades já implementadas em superclasses no caso da herança, implementações espalhadas em classes diferentes 22 / 41 Os princípios e vantagens da programação orientada a objeto. 23 / 41 Principais vantagens da POO. A programação orientada a objetos traz uma ideia muito interessante: a representação de cada elemento em termos de um objeto, ou classe. Esse tpo de representação procura aproximar o sistema que está sendo criado ao que é observado no mundo real, e um objeto contém característcas e ações, assim como vemos na realidade. Esse tpo de representação traz algumas vantagens muito interessantes para os desenvolvedores e também para o usuário da aplicação. Veremos algumas delas a seguir. 24 / 41 A reutlização de código é um dos principais requisitos no desenvolvimento de softare atual. Com a complexidade dos sistemas cada vez maior, o tempo de desenvolvimento iria aumentar exponencialmente caso não fosse possível a reutlização. A orientação a objetos permite que haja uma reutlização do código criado, diminuindo o tempo de desenvolvimento, bem como o número de linhas de código. Isso é possível devido ao fato de que as linguagens de programação orientada a objetos trazem representações muito claras de cada um dos elementos, e esses elementos normalmente não são interdependentes. Essa independência entre as partes do softare é o que permite que esse código seja reutlizado em outros sistemas no futuro. 25 / 41 Outra grande vantagem que o desenvolvimento orientado a objetos traz diz respeito a leitura e manutenção de código. Como a representação do sistema se aproxima muito do que vemos na vida real, o entendimento do sistema como um todo e de cada parte individualmente fca muito mais simples. Isso permite que a equipe de desenvolvimento não fque dependente de uma pessoa apenas, como acontecia com frequência em linguagens estruturadas como o C, por exemplo. 26 / 41 A criação de bibliotecas é outro ponto que é muito mais simples com a orientação a objetos. No caso das linguagens estruturadas, como o C, temos que as bibliotecas são coleções de procedimentos (ou funções) que podem ser reutlizadas. No caso da POO, entretanto, as bibliotecas trazem representações de classes, que são muito mais claras para permitrem a reutlização. 27 / 41 Entretanto, nem tudo é perfeição na programação orientada a objetos. A execução de uma aplicação orientada a objetos é mais lenta do que o que vemos na programação estruturada, por exemplo. Isso acontece devido à complexidade do modelo, que traz representações na forma de classes. Essas representações irão fazer com que a execução do programa tenha muitos desvios, diferente da execução sequencial da programação estruturada. Esse é o grande motvo por trás da preferência pela linguagem C em hardtare limitado, como sistemas embarcados. Também é o motvo pelo qual a programação para sistemas móveis como o Google Android, embora em Java (linguagem orientada a objetos), seja feita o menos orientada a objetos possível. 28 / 41 No momento atual em que estamos, tecnologicamente essa execução mais lenta não é sentda. Isso signifca que, em termos de desenvolvimento de sistemas modernos, a programação orientada a objetos é a mais recomendada devido as vantagens que foram apresentadas. Essas vantagens são derivadas do modelo de programação, que busca uma representação baseada no que vemos no mundo real. 29 / 41 Princípios da programação orientada a objetos. 30 / 41 Encapsulamento. O encapsulamento é uma das principais técnicas que defne a programação orientada a objetos. Se trata de um dos elementos que adicionam segurança à aplicação em uma programação orientada a objetos pelo fato de esconder as propriedades, criando uma espécie de caixa preta. 31 / 41 A maior parte das linguagens orientadas a objetos implementam o encapsulamento baseado em propriedades privadas, ligadas a métodos especiais chamados geters e seters, que irão retornar e setar o valor da propriedade, respectvamente. Essa attude evita o acesso direto a propriedade do objeto, adicionando uma outra camada de segurança à aplicação. 32 / 41 Para fazermos um paralelo com o que vemos no mundo real, temos o encapsulamento em outros elementos. Por exemplo, quando clicamos no botão ligar da televisão, não sabemos o que está acontecendo internamente. Podemos então dizer que os métodos que ligam a televisão estão encapsulados. 33 / 41 Herança. O reuso de código é uma das grandes vantagens da programação orientada a objetos. Muito disso se dá por uma questão que é conhecida como herança. Essa característca otmiza a produção da aplicação em tempo e linhas de código. 34 / 41 Para entendermos essa característca, vamos imaginar uma família: a criança, por exemplo, está herdando característcas de seus pais. Os pais, por sua vez, herdam algo dos avós, o que faz com que a criança também o faça, e assim sucessivamente. Na orientação a objetos, a questão é exatamente assim, como mostra a Figura 2. O objeto abaixo na hierarquia irá herdar característcas de todos os objetos acima dele, seus “ancestrais”. A herança a partr das característcas do objeto mais acima é considerada herança direta, enquanto as demais são consideradas heranças indiretas. Por exemplo, na família, a criança herda diretamente do pai e indiretamente do avô e do bisavô. 35 / 41 36 / 41 A questão da herança varia bastante de linguagem para linguagem. Em algumas delas, como C++, há a questão da herança múltpla. Isso, essencialmente, signifca que o objeto pode herdar característcas de vários “ancestrais” ao mesmo tempo diretamente. Em outras palavras, cada objeto pode possuir quantos pais for necessário. Devido a problemas, essa prátca não foi difundida em linguagens mais modernas, que utlizam outras artmanhas para criar uma espécie de herança múltpla. 37 / 41 Outras linguagens orientadas a objetos, como C#, trazem um objeto base para todos os demais. A classe object fornece característcas para todos os objetos em C#, sejam criados pelo usuário ou não. 38 / 41 Polimorfsmo Outro ponto essencial na programação orientada a objetos é o chamado polimorfsmo. Na natureza, vemos animais que são capazes de alterar sua forma conforme a necessidade, e é dessa ideia que vem o polimorfsmo na orientação a objetos. Como sabemos, os objetos flhos herdam as característcas e ações de seus “ancestrais”. Entretanto, em alguns casos, é necessário que as ações para um mesmo método seja diferente. Em outras palavras, o polimorfsmo consiste na alteração do funcionamento interno de um método herdado de um objeto pai. 39 / 41 Como um exemplo, temos um objeto genérico “Eletrodoméstco”. Esse objeto possui um método, ou ação, “Ligar()”. Temos dois objetos, “Televisão” e “Geladeira”, que não irão ser ligados da mesma forma. Assim, precisamos, para cada uma das classes flhas, reescrever o método “Ligar()”. 40 / 41 Com relação ao polimorfsmo, valem algumas observações. Como se trata de um assunto que está intmamente conectado à herança, entender os dois juntamente é uma boa ideia. Outro ponto é o fato de que as linguagens de programação implementam o polimorfsmo de maneiras diferentes. O C#, por exemplo, faz uso de método virtuais (com a palavra- chave virtual) que podem ser reimplementados (com a palavra-chave override) nas classes flhas. Já em Java, apenas o atributo “@Override” é necessário. 41 / 41 Esses quatro pilares são essenciais noentendimento de qualquer linguagem orientada a objetos e da orientação a objetos como um todo. Cada linguagem irá implementar esses pilares de uma forma, mas essencialmente é a mesma coisa. Apenas a questão da herança, como comentado, que pode trazer variações mais bruscas, como a presença de herança múltpla. Além disso, o encapsulamento também é feito de maneiras distntas nas diversas linguagens, embora os geters e seters sejam pratcamente onipresentes. Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40 Slide 41
Compartilhar