400 likes | 612 Views
Orientação a Objetos. Curso de Férias 2011 Enrique Pimentel Leite de Oliveira enrique@woopi.com.br. Orientação a objetos. Na POO, implementa-se um conjunto de classes que definem os objetos presentes no software .
E N D
Orientação a Objetos Curso de Férias 2011 Enrique Pimentel Leite de Oliveira enrique@woopi.com.br
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.
Programação Estruturada vs. Programação OO • A programação estruturada tem como principal foco as ações (procedimentos e funções) • A programação OO se preocupa com os objetos e seus relacionamentos. • Além do conceito de objeto, a programação OO tem como alicerces os conceitos de encapsulamento, classe, herança e polimorfismo.
Conceitos de OO • Classe • Objeto • Instância • Atributo • Métodos • Sobrecarga • Herança • Encapsulamento • Abstração • Polimorfismo • Classe Abstrata • Interface
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: • Seres humanos • Carro
Classe • Definição de classe em C#: public class Minha classe { }
Atributo • Normalmente é utilizado internamente na classe (A exposição das características da classe é tarefa dos métodos). • Exemplo: public class Livro { // Atributos private string titulo; private short ano; ... }
Exemplo • Quais seriam os atributos de uma classe Carro ? • Placa • Número do chassi • Marca • Modelo • Ano • Cor • Combustível • Capacidade • Motor • Velocidade
Métodos • Conceito: ações que podem ser realizadas pelo objeto; • Determinam como um objeto agirá ao receber uma mensagem; • São usados para dar acesso às funcionalidades dos objetos; • Exemplo: • Acender • Apagar • Iluminar
Métodos Exemplo public class Carro { public double Acelerar(double velocidade) { } }
Modificadores de acesso • Os modificadores de acesso são palavras-chave que modificam a forma como podem ser acessadas as classes, métodos e/ou variáveis
Objetos • 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, Fusca.
Objetos • Identificação do carro: • Placa: WWS2345 • Número do chassi: 9BGFG09ZYKJ182937 • Marca : Chevrolet • Modelo : Corvette • Ano: 2001 • Cor : Roxo • Combustível: gasolina • Capacidade: 4 pessoas • Motor: 2.3
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();
Criação de um objeto Instâncias da classe Casa (objetos) Classe 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(); Casa 12 boolean abrePorta() {} int numero Color cor static String arquiteto 56 72
Construtores • Construtores são procedimentos realizados na construção de objetos • Parecem métodos, mas não têm tipo de retorno e têm nome idêntico ao nome da classe • Nem sempre aparecem explícitos em uma classe: podem ser omitidos (o sistema oferece uma implementação padrão) • Para cada objeto, o construtor é chamado exatamente uma vez (durante sua criação) • Exemplo: • Objeto obj = newObjeto(); • Alguns podem requerer parâmetros • Objeto obj = newObjeto(35, "Nome");
Construtores • Implícitos • São aqueles que não são declarados dentro do código da classe, porém são chamados no momento da instanciação. • A linguagem se encarrega de iniciar os atributos da classe com os valores padrões adequados aos seus tipos. • Explícitos • São construtores declarados dentro do código da classe e que têm a finalidade de iniciar os atributos com valores diferentes dos padrões ou realizar determinadas tarefas no momento em que o objeto é criado.
ConstrutoresCaracterísticas • É o primeiro “método” executado por um objeto. • Deve ter o mesmo nome da classe. • Não pode ter um tipo de retorno. • É utilizado quando um objeto é instanciado através do operador new • Na maioria das vezes é declarado como public • Ele é responsável por alocar memória
ConstrutoresExemplo public class Cliente { int codigo; String nome; //Construtor public Cliente() { } }
ConstrutoresExemplo public class Cliente { int codigo; String nome; //Construtor public Cliente(int cod, String nom) { codigo = cod; nome = nom; } }
ConstrutoresExemplo public class Cliente { int codigo; String nome; //Construtores public Cliente() { } public Cliente(int cod, String nom) { codigo = cod; nome = nom; } }
Exercício • Crie uma classe ProcessaStrings que permita: • Armazenar uma lista de Strings • Contar o número de palavras de uma das strings • ContarPalavras(intindiceString) • Inverter uma das palavras • InverterString(intindiceString) • Concaternar duas strings • ConcatenarStrings(int indiceString1, int indiceString2) • Crie uma classe Teste para utilizar a classe ProcessaStrings
Exercício • Crie uma classe Veiculo com as seguintes características: • Marca • Modelo • Ano • Placa • Em seguida crie uma classe Estacionamento que permita controlar a entrada e saída e veículos. • Considere que a primeira hora custa R$ 3,00 e as demais horas R$ 1,00. • Modele a classe Estacionamento de acordo com as necessidades do seu projeto.
Herança • Uma característica importante da programação orientada a objetos é permitir a criação de novas classes com base em uma classe já existente • Esta classe existente pode ser tanto uma classe do próprio C#, ou ainda uma classe construída por outra pessoa • Superclasse: classe já existente • Subclasse: classe criada a partir da superclasse • Objetivo: proporcionar o reutilização de código
Herança • Herança • “Herança é a capacidade de reutilizar código pela especialização de soluções genéricas já existentes” • Novas classes são criadas a partir de outras já existentes • Subclasse herda de uma Superclasse • atributos • métodos • Subclasse • Absorve atributos e comportamentos além de adicionar os seus próprios • Pode sobrescrever métodos da superclasse • Construtores nunca são herdados!
Pai - numero: int ... + Pai (n: int) + set (n: int) + get ( ): int ... Filho - dado: String ... + Filho (n: int , d: String) + set (d: String) + get ( ): String ... Herança • Notação UML
Herança • Em C#, utiliza-se : para definir herança de classes • Exemplos: public class <nomesubclasse> : <nomesuperclasse> {...} public class Motorista : Funcionario{...} public class Engenheiro : Funcionario{...}
Herança • Os métodosna subclassequeforamherdados, continuamacessandotodososmembros (atributos) dasuperclasse, incluindoosnãoherdados. • Se for necessário invocar um método da superclasse dentro de algum método da subcalsse, em C# utiliza-se: base.Metodo() • Apesar dos construtoresdasuperclassenãoseremherdados, elespodem ser invocadosparainicializarosatributosherdados (membrosdasuperclasse), através com comando: • base()
Herança - Exemplo public class Animal { private String tipo; public Animal(String tipo1) { tipo = tipo1; } public void show() { Console.Write(“Eu sou um ” + tipo); } } public class Cachorro : Animal { private String nome; // Nome do cachorro private String raça; // Raça do cachorro public Cachorro(String nome1): base(“cachorro”) { nome = nome1; // Nome fornecido raça = “Desconhecida”; // Raça default } public Cachorro(String nome1, String r):base(“cachorro”) { nome = nome1; // Nome fornecido raça =r; // Raça fornecida } }
Herança • Subclasse herda os membros da superclasse • Os membros da superclasse são tratados como membros da subclasse, isto é, como se tivessem sido declarados dentro da subclasse. • Nem todos os atributos e métodos da superclasse são obrigatoriamente acessíveis na subclasse, pois isto dependerá dos modificadores de acesso. • Modificador private não permite acesso direto dentro da subclasse. • Um objeto possui seus próprios atributos e métodos, mais os atributos e métodos da superclasse
Herança • Herdando atributos e métodos • publicx protectedx private • public: acessível em qualquer classe • protected: acessível por métodos da própria classe ou de uma subclasse • private: acessível somente nos métodos da própria classe • Métodos construtores NUNCA são herdados • Os métodos na classe derivada que foram herdados da superclasse, continuam podendo acessar TODOS os membros da superclasse
Exercício • Escreva o código para implementar a seguinte hierarquia de classes: • Atributos da classe “Animal” : • String nome • Métodos da classe “Animal”: • voidimp() // imprime o nome • // e a classe do animal • StringgetNome() • voidtalk() // “Me not falar” • Métodos da classe “Passaro”: • voidtalk() // “piu, piu.” • Métodos da classe “BemTeVi”: • voidtalk() // “bem-te-vi!” • Atributos da classe “Papagaio”: • Stringvocabulario // frase • Métodos da classe “Papagaio”: • voidtalk() // exibe vocabulario • voidsetVoc(String v) //altera voc. • A classe mamífero não tem atributos ou métodos. • Atributos da classe “Cachorro”: • booleanlateMuito • Métodos da classe “Cachorro”: • voidsetLateAlto() • voidsetLateBaixo() • voidtalk() // “AU! AU!” ou “au, au...” • Métodos da classe “Vaca”; • voidtalk() // “Muuu...” • Implemente a classe Zoo (possui apenas o método main) que testa a hierarquia de classes, mantendo vetores de animais. A saída do programa deve ser feita via uma janela gráfica.
Atributos da classe “Animal” : • String nome • Métodos da classe “Animal”: • voidimp() // imprime o nome • // e a classe do animal • StringgetNome() • voidtalk() // “Me not falar” • Métodos da classe “Passaro”: • voidtalk() // “piu, piu.” • Métodos da classe “BemTeVi”: • voidtalk() // “bem-te-vi!” • Atributos da classe “Papagaio”: • Stringvocabulario // frase • Métodos da classe “Papagaio”: • voidtalk() // exibe vocabulario • voidsetVoc(String v) //altera voc.
Exercício Final • Crie um programa que permita controlar as contas bancárias de um cliente • O sistema deverá permitir: • Cadastrar contas (conta corrente, conta especial e poupança) • Fazer saques e depósitos • Movimentação entre contas.
Referências • Deitel, C# como Programar – Editora Makron Books – Segunda edição, 2007 • Rafael Santos, Introdução à Programação Orientada a Objetos usando JAVA – Editora Campus – Série SBC • Desenvolvedor 5 estrelas. Disponível em http://www.mslatam.com/brasil/dce/ • Desenvolvimento para Web. Disponível em http://msdn.microsoft.com/pt-br/ff380144.aspx