Orientação a Objetos Mauro César Lopes [email protected] Programação Estruturada x Programação Orientada a Objetos Programação Estruturada Programação Orientada a Objetos 2 O que é programar ? Programar é um exercício de ABSTRAÇÃO 3 Estrutura Estrutura do Computador Estrutura do Problema 4 OO - Proposta Permitir que os programadores organizem os problemas da mesma forma que as nossa mentes enxergam os problemas: não como um conjunto de espaços em memória, mas como um conjunto de “coisas” que fazem parte do problema. 5 OO - Proposta Imaginar o problema como um conjunto de objetos Modificar a maneira como enxergamos os programas (e os problemas) 6 Conceitos de OO Objetos Classes e instâncias Herança Polimorfismo Classes Abstratas e Interfaces 7 Objetos Um objeto é uma entidade concreta Ele possui: Atributos (dados/estados) Métodos (ações/operações) São instâncias de uma classe 8 Objetos - Exemplos Um carro Uma casa Uma transação 9 Classes e Instâncias É a criação de uma estrutura geral de onde objetos podem ser derivados 10 Exemplos de linguages OO C# C++ Java Python Ruby 11 Herança Herança de interface Herança de implementação Classe Base Classe Derivada 12 Polimorfismo É a possibilidade de dar um mesmo método, por exemplo, variadas formas, de acordo com o momento em que você decide utilizá-lo 13 Classes Abstratas e Interfaces Funciona como uma entidade neutra, cuja existência é particularmente útil apenas para exibir um modelo de derivação. 14 Metodologia “Todo conjunto de técnicas e práticas utilizado para atingir algum objetivo” 15 Paradigmas de Programação Modelos de programação 16 O que são objetos ? Como particionar (dividir) o projeto de acordo com essas entidades ? 17 Quais são suas interfaces ? Que mensagens devem ser trocadas entre os objetos? 18 Bibliografia MATOS A. V. de. Unified Modeling Language (UML) – Prático e Descomplicado. Editora Érica: São Paulo, 1992. 19 BACKUP 20 Classe Classe é a raiz da palavra classificação Ao projetar uma classe organizamos as informações em uma entidade (aquilo que constitui a natureza fundamental ou a essência de uma coisa ) significativa Essa organização é um ato de classificação 21 Exemplos Todos os carros compartilham comportamentos comuns (eles podem ser dirigidos, parados, acelerados, etc) e atributos comuns (ele tem um volante, um motor, rodas, etc) 22 Classes As pessoas utilizam a palavra carro para significar esses comportamentos e atributos comuns Desde que todos concordem com o que a palavra significa, esse sistema funcionará bem; você pode expressar idéias complexas mas precisas de uma maneira concisa. Sem classificação, é difícil imaginar como as pessoas poderiam pensar ou se comunicar 23 Objeto Objetos = dados + métodos 24 Encapsulamento A idéia por trás do encapsulamento (ou information hidding) é esconder a implementação das classes O usuário apenas instancia a classe e utiliza seus métodos, não se preocupando como os mesmos foram implementados 25 Encapsulamento Quando chamamos o método Console.WriteLine, não estamos preocupados como o método WriteLine foi escrito e como ele interage com a classe Console. Estamos preocupados apenas em usá-lo para exibir uma mensagem no console. 26 Definição de classes em C# No C# é utilizada a palavra-chave class para definir uma nova classe. Os atributos e os métodos da classe ocorrem no corpo da classe entre um par de chaves 27 Exemplo class Circulo { double Area() // método { return Math.PI * raio * raio; } int raio; // atributo } Corpo da Classe 28 Instanciando a classe Circulo c, c1, c2; // Cria uma variável do tipo Circulo c = new Circulo(); // Inicializa a variável c1 = new Circulo(); c2 = new Circulo(); Um objeto é uma instância de uma classe 29 Controle de Acessibilidade Acesso public a métodos e dados poderão ser acessados externamente a classe Acesso private a métodos e dados somente poderão ser acessados dentro da classe 30 Classe Circulo Class Circulo { public double Area() // método público { return Math.PI * raio * raio; } private int raio; // atributo privado } 31 Construtores Class Circulo { public Circulo() // construtor padrão { raio=0; } public double Area() // método público { return Math.PI * raio * raio; } private int raio; // atributo privado } 32 Sobrecarga de construtores Class Circulo { public Circulo() // construtor padrão { raio=0; } public Circulo(int r) // construtor sobrecarregado { raio = r; } } 33 Métodos e dados static 34 Classes estáticas 35 Classes Anônimas 36 Backup 37