1.12k likes | 1.27k Views
Técnicas de Programação. Introdução à. Orientação a Objetos. Profs.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br, rangeldequeiroz@gmail.com. Carga Horária: 60 horas. Introdução à POO I. Considerações Iniciais I
E N D
Técnicas de Programação Introdução à Orientação a Objetos Profs.:José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br, rangeldequeiroz@gmail.com Carga Horária:60 horas
Introdução à POO I • Considerações Iniciais I • Linguagens Orientadas a Objetos (LOO) desde a década de 1960 • Crescimento sem paralelo no uso e na aceitação de tecnologias de objeto por todo o setor de software última década • Sucessos recentes Java, CORBA, C++ • Programação Orientada a Objetos (POO) • Estágio na evolução natural do desenvolvimento de software
Introdução à POO II • Considerações Iniciais II • Orientação a Objetos (OO) • Termo genérico que inclui qualquer estilo de desenvolvimento fundamentado no conceito de objeto • Objeto • Entidade que exibe características e comportamentos
Introdução à POO III • Precursores da POO I • Linguagens Procedurais (e.g. FORTRAN, ALGOL) • Redução de programas a procedimentos refinados para processamento de dados • Procedimentos refinados Definição da estrutura global do programa • Execução de programas procedurais Chamadas seqüenciais a procedimentos • Finalização de um programa procedural Término da chamada à lista de procedimentos
Introdução à POO IV • Precursores da POO II • Linguagens Procedurais • Funções menores não são apenas mais fáceis de entender: são também mais fáceis de depurar • Programação procedural limita a reutilização do código • Produção freqüente de código spaghetti
Introdução à POO V • Precursores da POO III • Linguagens Procedurais • Inexistência de encapsulação (dados e procedimentos separados) exige que cada procedimento “saiba” manipular adequadamente os dados • Alterações na representação dos dados exige alterações em todas as partes do código que acessem os dados • Uma pequena alteração nos dados Cascata de alterações por todo o programa • Manutenção difícil e onerosa
Introdução à POO VI • Precursores da POO IV • Programação Modular (e.g. Modula2) • Melhoria de deficiências da programação procedural • Divisão dos programas em vários componentes ou módulos constituintes • Combinação de dados e procedimentos nos módulos • Partes de um programa utilizam um módulo exercitando sua interface
Introdução à POO VII • Precursores da POO V • Programação Modular (e.g. Modula2) • Ocultação de dados internos de um módulo do restante do programa • Introdução da idéia de estado Módulos contêm informações de estados que podem ser alterados quando conveniente • Estado de um objeto Significado combinado das variáveis internas do objeto • Variável interna Valor mantido dentro de um objeto
Introdução à POO VIII • Precursores da POO VI • Programação Modular (e.g. Modula2) • Deficiência 1 Módulos não extensíveis • Impossibilidade de alterações incrementais em um módulo sem abrir o código “à força” e executar diretamente as alterações necessárias • Deficiência 2 Módulos não podem se basear em outros • Impossibilidade de compartilhamento de tipos entre módulos
Introdução à POO IX • Precursores da POO VII • Linguagens Procedurais e Modulares • Dados estruturados e não estruturados têm um tipo • Tipo Melhor visualizado como o formato da memória para os dados • Linguagens “fortemente tipadas” • Exigência de que cada objeto tenha um tipo específico e definido • Impossibilidade de extensão de tipos para a criação de outro(s) tipo(s), exceto através do estilo denominado agregação
Introdução à POO X • Precursores da POO VIII • Linguagens Procedurais e Modulares • Exemplo em C typedef struct { int a; int b; } TipoBase; typedef struct { TipoBase Base; int c; } TipoDerivado; TipoDerivado baseia-se em TipoBase PORÉM Uma estrutura deTipoDerivado não pode ser tratada diretamente como uma estrutura de TipoBase
Introdução à POO XI • Precursores da POO IX • Linguagens Procedurais e Modulares • Exemplo em C (Conclusão) • Inconveniente Código com muitos blocos case e if/else para a manipulação adequada de cada bloco encontrado • Programação Modular • Também é um híbrido procedural Divisão do programa em vários procedimentos • Ao invés de atuar sobre dados brutos, os procedimentos manipulam módulos
Introdução à POO XII • Programação Orientada a Objetos I • Passo lógico que sucede a programação modular • Estruturação do programa Divisão em vários objetos de alto nível • Cada objeto modela um aspecto do problema a ser solucionado • Objetos interagem para orientar o fluxo global do programa • Programa OO Simulação fiel do problema a ser resolvido
Carrinho de compras Cupom Caixa Itens Introdução à POO XIII • Programação Orientada a Objetos II • Exemplo 01 I - Implementação de um carrinho de compras online • Objetos • Item • Carrinho de compras • Cupom • Caixa
Introdução à POO XIV • Programação Orientada a Objetos III • Exemplo 01 II - Implementação de um carrinho de compras online • Interação de objetos • Caixa Item • Item Carrinho de compras • Carrinho de compras Caixa • Caixa Cupom Verificar preço Adicionar ao Levar ao Produzir
Introdução à POO XV • Programação Orientada a Objetos IV • Definição de um programa em termos de objetos • Modo profundo de visualizar o software • Objetos Comportamentos • Visualização de objetos em nível conceitual Desvio da observação de como as coisas são feitas (implementação) • Visualização dos programas em termos naturais e reais • Modelagem dos programas Substantivos, verbos e adjetivos do domínio real do problema
Introdução à POO XVI • Programação Orientada a Objetos V • Definição de um programa em termos de objetos • Implementação • Definição de como algo deve ser executado • Domínio • Espaço no qual reside um problema a ser resolvido
Introdução à POO XVII • O que é Orientação a Objetos I tipo ou molde Classe instância ou exemplar Objeto comunicação entre objetos Mensagem
Joseana Automóvel Maçãs Casa Mundo real Modelo Automóvel Joseana dirige Casa Maçãs mora na come Introdução à POO XVIII • O que é Orientação a Objetos II
Introdução à POO XIX • Classe • Espécie de “gabarito” para muitos objetos • Espécie de descritor da estruturação interna dos objetos
Introdução à POO XX • Objeto • Entidades do mundo real • Instância • Objeto criado a partir de uma classe • Classe Descrição da estrutura da instância • Estado da instância Definição a partir das operações realizadas sobre ela
Caneta Classificação Instanciação Caneta2 Caneta1 Caneta3 Caneta4 Introdução à POO XXI • Instanciação de Objetos • Geração de novos exemplares a partir de uma descrição abstrata de um objeto genérico • Objetos são instâncias de uma classe
veículos Ferrari IDN8810 veículo Marca Placa objeto1 instâncias ler_placa Fiat Uno IAS3333 classe objeto2 Introdução à POO XXII
Introdução à POO XXIII • Classes • Agrupamentos de objetos (computacionais) com propriedade em comum, passíveis de realização das mesmas ações • Em geral, objetos de uma subclasse exibem as propriedades e executam as ações dos objetos de uma superclasse, além de exibirem algumas propriedades e reali9zarem algumas ações adicionais
Introdução à POO XXIV • Propriedades e Atributos • Objetos do mundo real exibem propriedades, às quais estão associadas valores
Introdução à POO XXV • Mensagens e Métodos • Objetos exibem determinados comportamentos (executam determinadas operações) ao receberem estímulos de outros objetos • Objetos requisitam ações de outros objetos a partir de mensagens
Introdução à POO XXVI • Conteúdo de uma mensagem • Nome do objeto receptor • Nome da mensagem • Argumentos (opcional) que podem ser objetos • Mensagem • Solicitação feita por um objeto a outro objeto, a fim de que seja executada uma rotina denominada método
Introdução à POO XXVII • Métodos • Responsáveis pelo acesso ou alteração dos atributos de um objeto • Atributos de um objeto podem mudar de acordo com o tempo • Mudança de estado do objeto
Atributos • modo de operação /* texto ou gráfico */ • dimensão horizontal • dimensão vertical • paleta de cores • cor atual Métodos • modo texto ( ) • modo gráfico ( ) • fecha modo gráfico ( ) • muda cor ( ) • escreve caracter ( ) • coloca pixel ( ) • muda dimensões (x,y) Introdução à POO XXVIII • Exemplo 02 - Atributos e Métodos da Tela de um Monitor
Introdução à POO XXIX • OO x Abstração • Representação mais intuitiva de objetos do mundo real
Introdução à POO XXX • OO x Programação • Atuação do programador sobre componentes já desenvolvidos e testados • Redução da complexidade • Elevação do grau de abstração
Introdução à POO XXXI • Encapsulação • Termo formal relativo ao “empacotamento” de dados de um objeto, de modo que o acesso só ocorra através dos métodos do referido objeto Objeto Atributos Métodos que acessam os atributos (dados)
Introdução à POO XXXII • Encapsulação • Com a encapsulação, o objeto se comporta como uma caixa-preta, aumentando a abstração • Encapsular é esconder como as coisas funcionam (data hiding) por trás de uma interface externa Joseana dirigeum automóvel usando pedais, alavanca de marchas e volante. Aspectos relativos ao motor lhe são ocultados
Introdução à POO XXXIII • Herança • Uma classe pode também resumir elementos comuns de outras classes • Superclasse e subclasse superclasse de Mamífero subclasse de Primata Felino Homem Gorila Gato Onça
Introdução à POO XXXIV • Herança • Atributos • Cor • Peso • # de Pernas • Localização Mobília superclasse de subclasse de Cadeira Mesa • Objeto • Preto • 5 Kg • 4 • Sala 512 • Estofado • Atributos • Tipo de Assento • Objeto • Marrom • 17 Kg • 1 • Sala 512 • 1,5 m • Atributos • Dimensões
Introdução à POO XXXV • Polimorfismo • Nome dado a capacidade que objetos diferentes têm de responder a uma mesma mensagem • Mesmo nome (mensagem), formas de execução diferentes, próprias de cada objeto • Com o polimorfismo o usuário pode enviar uma mensagem genérica e abandonar detalhes sobre a exata implementação sobre o objeto receptor
Introdução à POO XXXVI • Polimorfismo Gravar
bel Atributos a2 hj75 Atributos Atributos xz7 bg2 Atributos Atributos Introdução à POO XXXVII • Orientação a Objetos • Modo de estruturação do software sob a forma de uma coletânea de objetos discretos que incorporam: • Estrutura de Dados • Comportamento Associado
Introdução à POO XXXVIII • Orientação a Objetos • O paradigma da orientação a objetos representa uma mudança radical na maneira de se desenvolver sistemas computacionais, permitindo um melhor gerenciamento da complexidade destes sistemas.
Introdução à POO XXXIX • Orientação a Objetos • Na orientação a objetos não há separação dos dados e das funções que manipulam estes dados Desenvolvimento OO Desenvolvimento Estruturado
Introdução à POO XL • Orientação a Objetos • Conseqüência direta: • Minimização do “gap” semântico entre o sistema computacional e a aplicação real • Justifica parte das vantagens atribuídas à OO
Introdução à POO XLI Programação Orientada a Objetos Programação Estruturada Métodos Procedimentos e funções Instâncias de variáveis Variáveis Mensagens Chamadas a procedimentos e funções Classes Tipos de dados definidos pelo usuário Herança - Polimorfismo -
Introdução à POO XLII • Orientação a Objetos • Objetivo: • Gerar programas que sejam: • Legíveis e de fácil compreensão • Reutilizáveis • De fácil manutenção • Obtidos de forma produtiva
Introdução à POO XLIII • Linguagens de Programação Orientadas a Objeto • Mais familiares: • Java • C++ • Object Pascal • Menos familiares • SmallTalk • Eiffel
Introdução à POO XLIV • Paradigma Estruturado X Orientado a Objetos Módulo Pai Dado: struct{ int a;.... Paradigma Orientado a Objetos Módulo 1 Módulo 2 . . . func1(Dado,...{ func2(Dado,...{ } class Dado{ } int a; .... Dado public: Process func1 - (Modulo 1) func1(... func2 - (Modulo 2) func2(... func... }
Introdução à POO XLV • POO C++ • Declaração de Classes • Em C++, as classes permitem ao programador definir novos tipos de dados • As classes podem ser declaradas pelas palavras-chave STRUCT, UNION e CLASS • As estruturas em C++ podem ter membros de dados e de função • As classes (propriamente ditas) tem membros de dados (variáveis de instância) e de membros de função
Introdução à POO XLVI • POO C++ • Declaração de Classes • Uma instância de estrutura ou união é dita uma variável • Uma instância de classe é dita um objeto. • Ou seja, um objeto é uma variável do tipo classe
Introdução à POO XLVII • POO C++ • Um programa que utiliza uma interface controladora de um motor elétrico provavelmente definiria a classe motor • Os atributos desta classe seriam: temperatura, velocidade, tensão aplicada • Este provavelmente seriam representados na classe por tipos como float ou long • As funções membro desta classe seriam funções para alterar a velocidade, ler a temperatura, etc.
Introdução à POO XLVIII • POO C++ • Encapsulação • Definição de classe class <Nome da classe> { }; • Objetos ou Instâncias • Métodos e Atributos • Visibilidade • Associação e Agregação • Construtores e Destrutores
Introdução à POO IL • POO C++ • Um objeto ou instância de uma classe é a criação de uma ‘variável” ou objeto da classe • Instância Estática • Chamada de método ou atributo • <objeto> . <nome do método>;