Orientação a Objetos
Curso de Férias 2011
Enrique Pimentel Leite de Oliveira
[email protected]
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.
Programação Estruturada vs.
Programação OO
Programação Orientada a
Objetos
Programação Estruturada
Métodos
Procedimentos e funções
Atributos
Variáveis
Mensagens
Chamadas a procedimentos e
funções
Classes
Tipos de dados definidos pelo
usuário
Herança
-
Polimorfismo
-
Conceitos de OO







Classe
Objeto
Instância
Atributo
Métodos
Sobrecarga
Herança





Encapsulamento
Abstração
Polimorfismo
Classe Abstrata
Interface
Classe x Objeto
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 palavraschave que modificam a forma como podem ser
acessadas as classes, métodos e/ou variáveis
Modificador
Significado
public
Atributo ou método acessível a partir de qualquer lugar
private
Atributo ou método acessível apenas para o código que faz parte da
classe onde foi criado.
protected
Atributo ou método acessível apenas para o código que faz parte do
mesmo pacote, ou uma classe derivada (veremos com detalhes na
parte de Herança)
Não especificado
Atributo ou método acessível dentro da classe onde foi criado e em
classes que pertencem ao mesmo pacote.
Maiores informações:
http://msdn.microsoft.com/en-us/library/wxh6fsc7(v=VS.90).aspx
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
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();
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 = new Objeto();
Alguns podem requerer parâmetros

Objeto obj = new Objeto(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.
Construtores
Caracterí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
Construtores
Exemplo
public class Cliente
{
int codigo;
String nome;
//Construtor
public Cliente()
{
}
}
Construtores
Exemplo
public class Cliente
{
int codigo;
String nome;
//Construtor
public Cliente(int cod, String nom)
{
codigo = cod;
nome = nom;
}
}
Construtores
Exemplo
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


Inverter uma das palavras


InverterString(int indiceString)
Concaternar duas strings


ContarPalavras(int indiceString)
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



Subclasse



atributos
métodos
Absorve atributos e comportamentos além de adicionar os seus
próprios
Pode sobrescrever métodos da superclasse
Construtores nunca são herdados!
Herança

Notação UML
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

Em C#, utiliza-se : para definir herança de
classes

Exemplos:
public class <nomesubclasse> : <nomesuperclasse>
{...}
public class Motorista : Funcionario{...}
public class Engenheiro : Funcionario{...}
29
Herança

Os métodos na subclasse que foram herdados,
continuam acessando todos os membros (atributos) da
superclasse, incluindo os não herdados.


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 construtores da superclasse não serem
herdados, eles podem ser invocados para inicializar os
atributos herdados (membros da superclasse), através
com comando:

base()
Herança - Exemplo
public class Animal
{
private String tipo;
public Animal(String
{
tipo = tipo1;
}
public class Cachorro : Animal
{
private String nome;
// Nome do cachorro
tipo1) 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 void show()
{
Console.Write(“Eu sou um ” public Cachorro(String
+ tipo);
r):base(“cachorro”)
{
}
nome = nome1;
}
raça =r;
}
}
nome1, String
// Nome fornecido
// 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

public x protected x 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”:
•void imp() // imprime o nome
// e a classe do animal
•String getNome()
•void talk() // “Me not falar”
A classe mamífero não tem atributos ou métodos.
Métodos da classe “BemTeVi”:
•void talk() // “bem-te-vi!”
Atributos da classe “Cachorro”:
•boolean lateMuito
Métodos da classe “Cachorro”:
•void setLateAlto()
•void setLateBaixo()
•void talk() // “AU! AU!” ou “au,
au...”
Atributos da classe “Papagaio”:
•String vocabulario // frase
Métodos da classe “Vaca”;
•void talk() // “Muuu...”
Métodos da classe “Papagaio”:
•void talk() // exibe vocabulario
•void setVoc(String v) //altera voc.
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.
Métodos da classe “Passaro”:
•void talk() // “piu, piu.”


Atributos da classe “Animal” :
•
String nome
Métodos da classe “Animal”:
•
void imp() // imprime o nome

// e a classe do animal
•
String getNome()
•
void talk() // “Me not falar”

Métodos da classe “Passaro”:
•
void talk() // “piu, piu.”

Métodos da classe “BemTeVi”:
•
void talk() // “bem-te-vi!”

Atributos da classe “Papagaio”:
•
String vocabulario // frase

Métodos da classe “Papagaio”:
•
void talk() // exibe vocabulario
•
void setVoc(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/ptbr/ff380144.aspx
Download

Orientação a Objetos