 
                                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