Aula Prática 13
Orientação a Objeto
Monitoria 2010.2
Orientação a Objeto O que é?
Paradigma de programação que se baseia na premissa de que todos os componentes de um programa podem ser tratados como “objetos”
Cada objeto possui determinadas características e comportamentos específicos (atributos e métodos)
Por que usar OO?Orientação à Objeto é mais: Flexível Extensível Reusável Organizada Intuitiva
Objetos
Tudo são objetos!Um programa é um conjunto de objetos
interagindo e modificando seus estados através de métodos.
Ex.:Objeto: DVD
Método 1: PlayMétodo 2: PauseMétodo 3: VoltarMétodo 4: Avançar
ObjetosMétodos são como funções que atuam
sobre os atributos de um objeto, modificando-os.
Atributos são informações sobre um determinado objeto que mudam de acordo com uma ação executada (método).
Avançar(10 s)
1:10:32 1:10:42
Tempo sendo modificado
C++
Objetivo:○ Combinar o desempenho de C com as facilidades
de linguagens de alto nível.○ Oferecer uma melhor organização no
desenvolvimento de projetos complexos.○ Combinar paradigmas de programação para
aumentar a liberdade do desenvolvedor.Ou seja:
○ Em grosso modo, C++ possui o desempenho de C (imperativa) combinado com as facilidades de JAVA (orientada a objeto)
Classes• Uma classe representa um tipo de objeto• Agrupa objetos com características em comum• Assim como C possui structs, C++ possui classes
Classes• As classes possuem:
• Atributos• Métodos
• Que podem ser:• Privados (Só são acessados por métodos da classe)• Públicos (Podem ser manipulados diretamente)
ClassesEm C++ os métodos são definidos na classe, porém são efetivamente implementados fora dela:
No caso do método “Conta” (que é um construtor), não seria necessário definí-lo ou implementá-lo. C++ por padrão cria
um construtor sem parâmetros.
MAS O QUE É UM CONSTRUTOR??
O apontador this utilizado nesse construtor simplesmente guarda uma
referência para o objeto que está sendo criado. Seu uso só é necessário quando existe uma variável local com o mesmo
nome de um atributo da classe.
Construtor• É um método especial que toda classe possui.• Pode ser utilizado para criar um objeto de duas formas:
• Dinamicamente:• É utilizado junto com o comando new na hora de criar um
novo objeto pertencente à classe.• Ex.:
Construtor• Estaticamente:
Note que, assim como uma estrutura utiliza o operador -> para estruturas criadas dinamicamente e o operador . para as estáticas, o mesmo acontece com os objetos.
Encapsulamento• É uma técnica de programação que fornece uma maior
robustez ao código que está sendo criado.• Basicamente “protege” os atributos de modificações
indesejadas.• Funciona da seguinte forma:
• Atributos encapsulados são do tipo private• São criados métodos para que eles possam ser
acessados e modificados com segurança.• Ex.:
Não é possível remover uma quantia maior que o saldo. Como há encapsulamento,
caso o saldo não seja suficiente para o saque, ele
parmanece inalterado.
Streams• Em C++, a entrada e saída de dados é efetuada através
da biblioteca iostream• Um “stream” representa um dispositivo de entrada ou
saída, tal como o teclado e o console
Entrada Padrão• Entrada padrão: cin
• A leitura é feita utilizando o operator shift rightExemplo:
int a;cin >> a;
• Pode-se ler vários items de uma só vezExemplo:
int, a,b,c;cin >> a >> b >> c;
Entrada Padrão• Saída padrão: cout
• A leitura é feita utilizando o operator shift leftExemplo:
int a;cout << a;
• O comando endl pode ser usado para imprimir um \n• Analogamente ao cin, pode-se imprimir vários items
de uma só vez
int, a,b,c;cout << “Numeros: “ << endl << a << “ “ << b << “ “ << c;
Dúvidas??
ExercícioCrie uma classe para representar um inteiro, esta classe deve ser capaz de realizar as seguintes operações: 1) Atribuição de Adição (+=)2) Atribuição de Subtração (-=)3) Pre-Incremento (++?)
O seguinte trecho de código deve funcionar corretamente:
Inteiro a(10);Inteiro b;
b.somar(a);b.somar(a.incrementar());
cout << "A: " << a.getValor() << endl; // Saída 11cout << "B: " << b.getValor() << endl; // Saída 21
ExercícioCrie uma classe em C++ que simule um serviço de agenda. Para isso
você deve criar uma classe “Agenda” e uma classe “Compromisso”. A classe “Agenda” deve possuir os seguintes dados:
- Nome do dono- Número telefônico- E-mail- Compromissos
Você deve utilizar encapsulamento para criar métodos usados na modificação dos atributos.
Além disso, a classe “Compromisso” deve possuir os atributos a seguir:
- Data do compromisso- Informações sobre o compromisso
Ao final, receba do usuário duas agendas com cada uma dois compromissos.