Programação Orientada a Objetos Artur Henrique Kronbauer [email protected] 1 Conteúdos Abordados − − − − − − − − − − − − Programação Orientada a Objetos Como modelar com Orientação a Objetos(OO) Modelos, seus dados e comportamentos Definição de classes Definição de tipos primitivos e não primitivos Construtores Criação de Objetos Sobrecarga Interação entre Objetos Generalização Especialização Herança 2 O que é POO? • Programação Orientada a Objetos é uma metodologia de desenvolvimento de software. • Sua principal vantagem é a proximidade com a forma que os seres humanos visualizam e entendem o mundo ao seu redor. • Tem como principal objetivo facilitar a modelagem e desenvolvimento de sistemas, através da interação entre objetos. 3 Como podemos modelar com OO? • Vamos imaginar a seguinte situação: − A esposa de um jovem casal, se encontra no segundo mês de gravidez. No meio da noite, a grávida acorda com uma azia terrível. Como é natural, a mulher pede que seu marido providencie um antiácido para ela. 4 Como podemos modelar com OO? • Como poderíamos representar esse problema sobre a ótica dos Objetos? − − − − o objeto marido recebe uma mensagem do objeto esposa. O objeto marido responde a essa mensagem mediante a uma ação: buscar antiácido. A esposa não tem que dizer a ele onde ele deve procurar, é responsabilidade do marido a ação de procurar o antiácido. Ao objeto esposa basta ter emitido uma mensagem ao marido. 5 Modelos e Dados • Os modelos na POO são chamados de classes. • As classes especificam as características dos objetos materializados a partir delas. • Tais características são chamados de atributos. • Ao ser materializado um objeto dizemos que criamos uma Instância da classe. • Instâncias distintas de uma mesma classe possuem os mesmos atributos, entretanto com possíveis diferenças de valores. 6 Modelos e Dados • Os objetos são diferenciadas pelos seus nomes de referência e não pelo valor de seus atributos. 7 Modelos e Comportamento • Em muitas situações os problemas do mundo real ao serem modelados para o mundo computacional, necessitam ser fragmentados de acordo com as ações que esse modelo especificará para a representação do problema. • Objetos possuem comportamentos os quais são representados nas classes através dos métodos. 8 Modelos e Comportamento • A fragmentação permite que o problema seja representado por um conjunto de métodos, os quais representam as ações do modelo. • Vantagens de ter vários métodos em um modelo: − − − − − facilidade em escrever o modelo; utilizações repetidas de um mesmo método; facilidade em dar manutenção; utilização de parametrizações; utilização adequada de recursos. 9 Abstraindo dados e Comportamentos 10 Abstraindo dados e Comportamentos 11 Definição de uma classe em Java 12 Definição de Tipos • Os tipos aparecem tanto nas declarações de atributos como na declaração de métodos. • Os tipos podem ser primitivos: − • int, float, char, double, byte, boolean. Classes também são tipos! Os tipos podem ser Não primitivos (nomes de outras classes previamente definidas) − String, Mamiferos 13 Exemplos da utilização de Tipos • Para definição de Atributos: 14 Exemplos da utilização de Tipos • Para a construção de Métodos: 15 Construtores • Um construtor é um método que possui o mesmo nome da classe onde ele está declarado. • Seu objetivo é inicializar o estado interno de um objeto (seus atributos). • O construtor não possui retorno de nenhum tipo, nem mesmo void. • Um construtor sempre é chamado através do operador new no momento de se instanciar um objeto. 16 Criando Objetos 17 Sobrecarga de Métodos e Construtores • Diferentes métodos podem ter o mesmo nome, porém com listas de parâmetros (assinaturas) diferentes. • Esse conceito é chamado de sobrecarga. • Este fato muitas vezes é necessário para modelarmos comportamentos semanticamente semelhantes, porém alimentados com dados diferentes. 18 Exemplo de Sobrecarga class soma { int calculo(int numero1, int numero2) { int resposta; resposta = numero1 + numero2; return resposta; } int[] calculo(int vetor1[], int vetor2[]) { int[] resposta = new int[vetor1.length]; int i; for (i=0; i < vetor1.length; i++) { resposta[i] = vetor1[i] + vetor2[i]; } return resposta; } } 19 Interação entre Objetos • Modelagens complexas necessitam da interação entre vários objetos para a solução do problema. • A idéia é chamada de “Dividir para conquistar”. • Em POO, podemos ter várias classes com objetivos específicos, as quais ao interagirem através de seus objetos solucionam problemas mais abrangente. 20 Exemplo de Interação entre Objetos Controle de Estoque 21 Generalização • Dona Cicinha quer evoluir o sistema para controlar o faturamento. • Para isso será necessário controlar os quitutes vendidos. • Ao ser criadas as classes quitutes e bebidas, podemos notar que alguns atributos e métodos são iguais. • A criação de uma classe chamada produtos poderia agrupar as semelhanças. 22 Generalização 23 Generalização • Através da generalização podemos agrupar em uma classe um conjunto de definições comuns a diferentes classes. 24 Especialização • A especialização é o caminho inverso da generalização. Partindo de um modelo mais genérico podemos acrescentar novas características e comportamentos aos já existentes. 25 Herança • Herança é um dos mecanismos fundamentais de relação entre classes na orientação a objetos. • Ela relaciona uma classe pai (superclasse) com outras classes filhas (subclasses) de forma hierárquica. • As subclasses herdam todos os atributos e métodos da superclasse e podem criar os seus próprios métodos e atributos. 26 Herança • A definição de herança em uma classe ocorre na linguagem Java através da palavra “extends” colocada logo após o nome da classe que herda de outra. • Uma subclasse para referenciar os métodos ou atributos da superclasse utilizamos a palavra reservada super. 27 Herança 28 Assuntos para a próxima Aula • Modificadores de acesso a Atributos e Métodos • Polimorfismo • Classes Abstratas • Interfaces • Pacote de Classes 29 Bibliografia • BARNES, D e Kölling, M. Programação Orientada a Objetos com Java. 2a Edição: Editora Pearson Education. 2007. • DEITEL, H. M. e DEITEL, P. J. Java como Programar. 4a Edição: Editora Bookman. 2003. • SANTOS, R. Introdução à Programação Orientada a Objetos Usando Java. 1a Edição: Editora Campus. 2003. 30