Orientação a Objetos Paradigmas de Programação Marco Antonio Montebello Júnior [email protected] Orientação a objetos Também conhecida como Programação Orientada a Objetos (POO) ou ainda em inglês Object-Oriented Programming (OOP). A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos para descrever um software. Paradigmas de Programação Orientação a objetos Na POO, implementa-se um conjunto de classes que definem os objetos presentes no software. Cada classe determina o comportamento (definidos nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos. Paradigmas de Programação Orientação a objetos A OO é mais intuitiva e fácil de aprender do que as técnicas tradicionais, pois foca o problema em conceitos do mundo real. Dentre as vantagens que a OO proporciona, podemos destacar: aumento de produtividade reuso de código redução das linhas de código programadas componentização facilidade na manutenção, etc.... Paradigmas de Programação Conceitos fundamentais de OO Classe Objeto Instância Atributo Propriedades Métodos Sobrecarga Herança Encapsulamento Abstração Polimorfismo Interface Paradigmas de Programação Abstração Segundo SEBESTA [Sebe2000], abstração “é uma visualização ou uma representação de uma entidade que inclui somente os atributos de importância em um contexto particular”. Seu propósito na programação é: diminuir a complexidade; permitir que os programadores se concentrem apenas nos atributos essenciais. Paradigmas de Programação Tipos de abstração Abstração de processo public void fatorial(int iNumber) { ... } Abstração de dados Ocultar informações irrelevantes, preocupando-se apenas com as características e a forma de comunicação. Paradigmas de Programação Classe x Objeto Paradigmas de Programação Conceitos fundamentais de OO Classe Classe: Representa um conjunto de objetos com suas próprias características. Uma classe define o comportamento dos objetos, através de métodos e quais estados (características) ele é capaz de manter, através de atributos. Exemplo de classe: Os seres humanos Carro Paradigmas de Programação Conceitos fundamentais de OO Classe Classes são uma especificação para objetos Uma classe representa um tipo de dados complexo Classes descrevem Tipos dos dados que compõem o objeto (o que podem armazenar) Procedimentos que o objeto pode executar (o que podem fazer) Paradigmas de Programação Conceitos fundamentais de OO Classe Instâncias da classe Casa (objetos) Classe Casa boolean abrePorta() {} int numero Color cor static String arquiteto 12 56 72 Casa c1 = new Casa(); c1.numero = 12; c1.cor = Color.Yellow; Casa c2 = new Casa(); c2.numero = 56; c2.cor = Color.Red; Casa c3 = new Casa(); c3.numero = 72; c3.cor = Color.White; c3.abrePorta(); Paradigmas de Programação Conceitos fundamentais de OO Classe Classes definem lógica estática Relacionamentos entre classes são definidos na programação e não mudam durante a execução Relacionamentos entre objetos são dinâmicos e podem mudar. O funcionamento da aplicação reflete a lógica de relacionamento entre os objetos, e não entre as classes. Classes não existem no contexto da execução Uma classe representa vários objetos que ocupam espaço na memória, mas ela não existe nesse domínio A classe tem papel na criação dos objetos, mas não existe quando os objetos trocam mensagens entre si. Paradigmas de Programação Conceitos fundamentais de OO Classe Definição de classe em C#: class FirstClass { //atributos //propriedades //métodos } Paradigmas de Programação Conceitos fundamentais de OO Objeto: É uma instância de uma classe. Um objeto é capaz de armazenar estados através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Exemplo de objetos da classe Humanos: João, José, Maria Exemplo de objetos da classe Carro: Ferrari, Golf, Audi, Celta. Paradigmas de Programação Conceitos fundamentais de OO Objetos Objetos são conceitos que têm identidade, estado e comportamento Características de Smalltalk, resumidas por Allan Kay: Tudo (em OO) são objetos Um programa é composto de vários objetos enviando mensagens uns aos outros O espaço (na memória) ocupado por um objeto consiste de outros objetos Todo objeto possui um tipo (que descreve seus dados) Objetos de um determinado tipo podem receber as mesmas mensagens Paradigmas de Programação Conceitos fundamentais de OO Objetos Em uma linguagem OO pura Um objeto é composto de objetos, portanto Uma variável é um objeto Um programa é um objeto Um procedimento é um objeto Um programa (objeto) pode ter variáveis (objetos que representam seu estado) e procedimentos (objetos que representam seu comportamento) Analogia: abstração de um telefone celular É composto de outros objetos, entre eles bateria e botões A bateria é um objeto também, que possui pelo menos um outro objeto: carga, que representa seu estado Os botões implementam comportamentos Paradigmas de Programação Criação de um objeto Em C#, utiliza-se a seguinte sintaxe para criação de objetos: <Tipo> <nome> = new <Tipo>(); Exemplos: Computador comp1 = new Computador(); Pessoa pess = new Pessoa(); Paradigmas de Programação Membros de instância Cada objeto, quando criado, aloca espaço para eles Só podem ser usados através de objetos Paradigmas de Programação Exemplo public class Casa { private Porta porta; private int numero; public System.Drawing.Color cor; public Casa() { porta = new Porta(); numero = ++contagem * 10; } Tipo public void abrePorta() { porta.abre(); } public static String arquiteto = "Zé"; private static int contagem = 0; static Casa(){ if ( condição ) { arquiteto = "Og"; } } } Paradigmas de Programação Atributos de instância: cada objeto poderá armazenar valores diferentes nessas variáveis. Procedimento de inicialização de objetos (Construtor): código é executado após a criação de cada novo objeto. Cada objeto terá um número diferente. Método de instância: só é possível chamá-lo se for através de um objeto. Atributos estáticos: não é preciso criar objetos para usá-los. Todos os objetos os compartilham. Procedimento de inicialização estático: código é executado uma única vez, quando a classe é carregada. O arquiteto será um só para todas as casas: ou Zé ou Og. Mensagens A comunicação entre objetos ocorre através das mensagens; Ao receber uma mensagem, um objeto necessita executar uma ação; As ações ocorrem através de procedimentos denominados métodos. MENSAGEM OBJETO B OBJETO A Paradigmas de Programação Métodos Determinam como um objeto agirá ao receber uma mensagem; Implementa abstração de processos, uma que o objeto que envia a mensagem não necessita saber como o receptor irá tratá-la; São usados para dar acesso às funcionalidades dos objetos. Paradigmas de Programação Propriedades Fornecem acesso aos dados contidos no objeto; Exemplo: class Pessoa { private string strName; public string GetSetName { get {return strName;} set {strName = value}; } } Paradigmas de Programação Atributos Descrevem as características de um objeto: Exemplo: Um objeto pessoa possui os atributos: nome, endereço etc. Normalmente é utilizado internamente na classe (A exposição das características da classe é tarefa das propriedades) Modificador Significado public Atributo acessível a partir de qualquer código private Atributo acessível apenas para o código que faz parte da classe (o padrão se nenhuma palavra-chave for usada) Internal Atributo acessível apenas para o código dentro do projeto em que ele é definido protected Atributo acessível apenas para o código que faz parte da classe, ou uma classe derivada (veremos com detalhes na parte de Herança) Paradigmas de Programação Conceitos fundamentais de OO Instância É um objeto gerado por uma classe. A classe é apenas a representação de um objeto enquanto a instância de uma classe é o objeto propriamente dito, com tempo e espaço de existência. Paradigmas de Programação Exemplo de instância (*) Em C#, utiliza-se a seguinte sintaxe para criação de objetos: <Tipo> <nome> = new <Tipo>(); Exemplos: Computador comp1 = new Computador(); Pessoa pess = new Pessoa(); Paradigmas de Programação Aprofundando nos Conceitos Objeto Cada objeto ativo no sistema em particular também é chamado de instância. As diferentes instâncias possuem seu próprio estado. Exemplos de instâncias de pessoas Paradigmas de Programação Aprofundando nos Conceitos Objeto Paradigmas de Programação Aprofundando nos Conceitos Classe Na Orientação a Objetos também é possível ter vários objetos do mesmo tipo, que compartilham caracteríscas em comum. Uma classe é um modelo (protótipo) que define as variáveis (estado) e os métodos (comportamento) comuns a todos os objetos do mesmo tipo. Paradigmas de Programação Exemplo prático Implementar a classe pessoa Implementar a classe carro Implementar a classe fruta Implementar a classe árvore. Paradigmas de Programação