280 likes | 397 Views
Albert Einsten. Orlando Silva. Ari Barroso. Uma palavrinha importante em POO ( P rogramação O rientada ao O bjeto). reúso. Vou tornar a usar a Relatividade Restrita... Vou reusá-la para desenvolver a Geral!. Vou dar novo uso às minhas músicas... Vou reusá-las em um novo CD!.
E N D
Albert Einsten Orlando Silva Ari Barroso Uma palavrinha importante em POO (Programação Orientada ao Objeto) reúso Vou tornar a usar a Relatividade Restrita... Vou reusá-la para desenvolver a Geral! Vou dar novo uso às minhas músicas... Vou reusá-las em um novo CD! • tornar a usar; • dar novo uso a; • efetuar a reuti- • lização. Vou efetuar a reutilização das minhas músicas...Vou reusá-las em um novo ritmo!
Introduzindo a POO Classe Animal Herança simples Mamifero Marinho Inseto Leao Homem Peixe Mosca Barata Herança múltipla: Homosca é um Homem e uma Mosca. Também é um Animal, Mamífero e Inseto. atributos Homosca operações
Introduzindo a POO: brincadeirinha... Objeto Animal Objeto Objeto Herança simples Felino Cervideo Canino Gato Leao Veado Lobo Cachorro Objeto Sou filho de famosos! Herança múltipla LeaoLobo
- private # protected + public virtual * -> new delete Outras três palavrinhas importantes em POO • encapsulamento; Propriedade de uma classe incluir ou encerrar atributos e operações. Propriedade de uma classe transmitir atributos e operações para as suas descendentes. • hereditariedade; • polimorfismo. Propriedade de uma classe se apresentar sob numerosas formas; multiforme.
UML (Unified Modeling Language) • é a especificação mais usada da OMG • é o meio de modelar: • estrutura da aplicação • comportamento • arquitetura • processos de negócios • estruturas de dados • www.uml.org Object Management Group Veja na Internet: é “di grátis”!
k i j Edsger Wybe Dijkstra Classes em UML e C++(Unified Modeling Language) em C++ class { ... }; Exemplo de anotação em UML. As anotações em UML podem se transformar em comentários C++: // de linha /* de bloco */ Nome da Classe atributos operações Um dos pais da Programação Estruturada
Visibilidade em UML e C++ em C++ class { ... private: ... }; em C++ class { ... protected: ... }; # - protegida privada Dois pontos! Dois pontos! em C++ class { ... public: ... }; + pública Dois pontos!
Chacrinha Classes e visibilidade em UML Se isto é tudo que você pode ver, vá estudar! Exemplo de uma classe com atributos e operações representadas. Exemplo de uma classe com atributos e operações surpimidas. Aluno Aluno privado • - nome: String • - idade: Integer protegido • + setNome(nome: String) • + getNome(): String • # calcMens(): Double • - calcDesc(): Double público
UML e C++: encapsulamento Geralmente não significa obrigatoriamente. Pense sempre em REÚSO! • Programamos geralmente dados privados com métodos públicos: • construtores padrão, de cópia, • etc (mesmo nome da classe); • destrutores (~); • atribuidores (=); • acessores (set(s) e get(s)); • etc. Métodos que realizam acesso, não confunda com assessor! Nome da Classe em C++ private: - atributos # em C++ protected: + operações em C++ public:
Representação de objetos em UML Exemplo de um objeto não intitulado com classe identificada. Exemplo de um objeto com classe identificada. sublinhado luisInacioLula: Presidente : Presidente Exemplo de um objeto intitulado com classe não identificada. objeto dois pontos classe luisInacioLula:
Bjarne Stroustrup Quatro pontos importantes em C++ É um construtor que não requer argumentos. Se você não definir, o C++ definirá! • construtor padrão; • construtor de cópia; É um construtor que possui um único parâmetro do mesmo tipo que a classe. Se você não definir, o C++ definirá! • destrutor; • atribuidor. É chamado automaticamente quando o objeto sai do escopo. Se você não definir, o C++ definirá! Se você não definir, o C++ definirá! É um operador utilizado na atribuição (imputação de valores de um objeto para outro). Se você não definir, o C++ definirá! Criador da Linguagem C++
Quatro pontos importantes em C++ • construtor padrão: class NomeDaClasse { ... NomeDaClasse(); ... }; NomeDaClasse::NomeDaClasse() { ... } Definição do construtor padrão Definição da classe NomeDaClasse *xp = new NomeDaClasse(); ... delete xp; Chamada do Construtor Chamada implícita do Construtor NomeDaClasse x; Chamada explícita do Construtor NomeDaClasse x = NomeDaClasse();
Quatro pontos importantes em C++ • construtor de cópia: class NomeDaClasse { ... NomeDaClasse(NomeDaClasse x); ... }; Definição da classe NomeDaClasse::NomeDaClasse(NomeDaClasse x) { ... } Definição do construtor de cópia
Quatro pontos importantes em C++ • destrutor: class NomeDaClasse { ... ~NomeDaClasse(); ... }; Definição da classe NomeDaClasse::~NomeDaClasse() { ... } Definição do destrutor
Quatro pontos importantes em C++ • atribuidor: class NomeDaClasse { ... NomeDaClasse & operator =(NomeDaClasse &x); ... }; Definição da classe NomeDaClasse & NomeDaClasse::operator =(NomeDaClasse &x); { ... } Definição do atribuidor
retângulo b a Dennis Ritchie Brian Kernighan Exercício 01: elabore uma classe C++ para abstrair o conceito de retângulo. Faça reúso em uma aplicação console. 30 minutos! • Verifique: • construtor padrão; • construtor de cópia; • destruidor; • atribuidor; • acessores. Criadores da Linguagem C
elipse b a Exercício 02: elabore uma classe C++ para abstrair o conceito de elipse. Faça reúso em uma aplicação console. 25 minutos! • Verifique: • construtor padrão; • construtor de cópia; • destruidor; • atribuidor; • acessores.
b c triângulo a Exercício 03: elabore uma classe C++ para abstrair o conceito de triângulo. Faça reúso em uma aplicação console. 20 minutos! • Verifique: • construtor padrão; • construtor de cópia; • destruidor; • atribuidor; • acessores.
associação generalização (pinheiro/bananada) ClasseA ClasseA ClasseA ClasseA composição (diamante negro) agregação (diamante) ClasseB ClasseB ClasseB ClasseB dependência (seta) Relacionamentos em UML “tem um” “é um” Desenhos:
Tipo Sivirino * 1 1 1 * 0..1 0, 1 1 1 1 1, 2 1 1 1
Reflexões de Gandhi Repitam comigo: éhummm, tenhummm, éhummm, tenhummm, éhummm, tenhummm, éhummm, tenhummm, ... “é um” “tem um” Mahatma Gandhi
Exemplo de herança em UML Animal Herança simples Felino Cervideo Canino Gato Leao Veado Lobo Cachorro Herança múltipla LeaoLobo
generalização Niklaus Wirth UML e C++: hereditariedade “é um” em C++ class Derivada: private Base { ... }; em C++ class Derivada: protected Base { ... }; Esta é a mais usada! em C++ class Derivada: public Base { ... }; Criador do Pascal
Associação em UML É a parte que cada objeto desempenha na associação. Identifica a associação e descreve o relacionamento. Mostra quem dirige a associação. papel nome da associação direção da associação papel nome da classe multipli-cidade multipli-cidade nome da classe Indica quantos objetos tomam parte na associação.
orientado pelo requer tarefas do Exemplos de associações em UML Aluno estudante orientador Professor * 1 cumpridor de tarefas solicitador Aluno Professor 1 1..* Aluno Lousa 1..44 2 Odalisca Sultão 40 1
Exercício 04: elabore uma classe C++ para implementar o conceito de complexo. Faça reúso em uma aplicação console. 60 minutos! • Pense no REÚSO em: • construtores padrão; • construtores de cópia; • destruidor; • atribuidores; • acessores set(s) e get(s); • operadores.
UML e C++: polimorfismo classe abstrata em C++ método = 0 4.polimorfismo paramétrico em C++: template 1.sobrescrita Repare no Itálico! 2.sobrecarga T NomeDaClasse • 3.polimorfis-mo de inclusão • em C++: • virtual • * e -> • new • delete Esteriótipo: é uma forma fixa, uma coisa que não muda, uma convenção. Em UML ele é utilizado para criar a classificação de elementos que não foram definidos como padrão. << >>