Buscar

[Prof. Emiliana] aula teórica 3

Prévia do material em texto

Programação Orientada a Objetos em C++:
Classes
BCC702-Programação de Computadores II
Emiliana Mara Lopes Simões
simoes.eml@gmail.com
Universidade Federal de Ouro Preto
março 2010
Abstração
As pessoas tipicamente tentam compreender o mundo construindo
modelos que abstraem apenas as características relevantes do
que está sendo observado
Abstração
Estruturas de Dados
Conjunto de dados que representa uma situação real(Abstração da
realidade)
Os dados podem estar representados (estruturados) de
diferentes maneiras
Normalmente, a escolha da representação é determinada pelas
operações que serão realizadas sobre eles
Exemplo: Números inteiros
Representação por palitinhos: II + IIII = IIIIII
Boa para pequenos números (operação simples)
Representação decimal: 1278 + 321 = 1599
Boa para números maiores (operação complexa)
Tipos Abstratos de Dados (TADs)
Um Tipo Abstrato de Dados (TAD) agrupa a estrutura de
dados juntamente com as operações que podem ser feitas sobre
esses dados
Exemplo:
Tipos Abstratos de Dados (TADs)
O TAD encapsula a estrutura de dados. Isto é, os usuários do
TAD só tem acesso a algumas operações disponibilizadas sobre
esses dados
Usuário só “enxerga” a interface, não a implementação
Classes
Em linguagens orientadas a objeto, como C++, a
implementação de um TAD é feita através de classes. A
classe é composta por:
Atributos: Dados da classe;
Funções membro ou métodos: Rotinas que acessam e
manipulam os atributos da classe
Classes
Exemplo
Objeto
Um objeto é uma instância de uma classe identificado de
forma única através de um nome
Programação Orientada a Objetos
É uma metodologia de desenvolvimento de software
Usa classes e objetos criados a partir de abstrações da
realidade, para representar e processar dados
Sua principal vantagem é a proximidade com a forma com que
os seres humanos visualizam e entendem o mundo ao seu redor
Programação Orientada a Objetos
Vantagens da POO:
Modularidade
Reusabilidade
Produtividade
Facilitar Manutenção
Implementação
E como fica a implementação de tudo isso????
Classes
Quando queremos criar um projeto com diversas classes uma
boa prática de programação é definirmos nossas classes
seguindo as seguintes convenções:
Criamos um arquivo de extensão .h só com a definição da
classe;
E um arquivo de extensão .cpp só com a implementação das
suas funções.
Classes
Forma geral de uma definição de classe em C++
class nome_da_classe{
private:
//declaração de dados e funções privadas
public:
//declaração de dados e funções públicas
};
Arquivo: nome_da_classe.h
Classes
Exemplo: Definição da classe Circulo
class Circulo{
private:
float raio;
float x, y;
public:
void mover(float deltaX, float deltaY);
void aumentar(float deltaR);
};
Arquivo: Circulo.h
Classes
Forma geral da definição de uma função da classe
#include “nome_da_classe.h”
tipo_de_retorno nome_da_classe::nome_do_método(lista_de_parâmetros){
//código do método
}
Arquivo: nome_da_classe.cpp
Classes
Exemplo: Definição das funções da classe Circulo
#include “Circulo.h”
void Circulo::mover(float deltaX, float deltaY){
x = x + deltaX;
y = y + deltaY;
}
void Circulo::aumentar(float deltaR){
raio = raio + deltaR;
}
Arquivo: Circulo.cpp
Classes
Exemplo: Instanciando um objeto da classe Circulo no main
#include “Circulo.h”
main(){
Circulo c;
c.aumentar(10);
}
Arquivo: main.cpp
Classes: Método Construtor
HÁ UM “PROBLEMA” NA CLASSE ANTERIOR
Quais são os valores iniciais das variáveis x, y e raio para um
objeto da classe Circulo????
Classes: Método Construtor
É um método especial que é chamado quando criamos um
novo objeto;
Deve possuir o mesmo nome da classe;
Não possui valor de retorno, nem mesmo void;
É utilizado para inicializar os atributos da classe.
ENTÃO A SOLUÇÃO É: Criar um método construtor para a classe
Circulo
Classes: Método Construtor
Exemplo: Definição da classe Circulo com declaração de um
método construtor sem parâmetros
class Circulo{
private:
float raio;
float x, y;
public:
Circulo();
void mover(float deltaX, float deltaY);
void aumentar(float deltaR);
};
Arquivo: Circulo.h
Classes: Método Construtor
Exemplo: Definição do método construtor sem parâmetros
#include “Circulo.h”
Circulo::Circulo(){
x = 0;
y = 0;
raio = 1;
}
...
Arquivo: Circulo.cpp
Classes: Método Construtor
Observações:
Um construtor pode ter vários parâmetros;
Uma classe pode ter vários construtores que se diferem pela
lista de parâmetros.
PORTANTO: O construtor a ser chamado depende da forma como
o objeto da classe está sendo instanciado
Classes: Método Construtor
Exemplo: Definição da classe Circulo com declaração de
construtores sem/com parâmetro
class Circulo{
private:
float raio;
float x, y;
public:
Circulo();
Circulo(float r);
void mover(float deltaX, float deltaY);
void aumentar(float deltaR);
};
Arquivo: Circulo.h
Classes: Método Construtor
Exemplo: Definição de construtores sem/com parâmetro
#include “Circulo.h”
Circulo::Circulo(){
x = 0;
y = 0;
raio = 1;
}
Circulo::Circulo(float r){
x = 0;
y = 0;
raio = r;
}
...
Classes: Método Construtor
Exemplo: Instanciando objetos da classe Circulo no main
#include “Circulo.h”
main(){
Circulo c1;
Circulo c2(5);
c1.aumentar(10);
c2.aumentar(10);
}
Escopo de Variáveis
Atributos declarados em uma classe são válidos por toda a
classe
Variáveis declaradas dentro de um método de uma classe só
serão válidas dentro desse método
Modificadores de acesso
Modificadores de acesso podem ser usados tanto em atributos
como em métodos
O objetivo é proteger a integridade e a consistência dos dados
e operações que uma determinada classe manipula
Modificadores de acesso
Membros de uma classe podem ser:
public: Podem ser acessados em qualquer lugar
private: Só podem ser acessados pelos membros da própria
classe
protected: Podem ser acessados apenas por membros da
própria classe ou das suas sub-classes ou classes derivadas
Funções get e set
Exemplo: Tentativa de acesso a membros private fora da
classe
#include “Circulo.h”
main(){
Circulo c1;
Circulo c2(5);
c1.aumentar(10);
c2.aumentar(10);
//ERRO!!!!!
c1.raio = 3;
}
Funções get e set
São funções usadas para acessar e modificar dados
encapsulados da classe indiretamente
get (obter o valor de)
Serve para se ter acesso aos atributos encapsulados de uma
classe
set (atribuir valor a)
Útil para permitir a modificação dos atributos da classe
encapsulados
Garante a integridade dos dados
Exemplo: Funções get e set para o atributo raio
class Circulo{
private:
float raio;
float x, y;
public:
Circulo();
Circulo(float r);
void setRaio(float r);
float getRaio();
void mover(float deltaX, float deltaY);
void aumentar(float deltaR);
};
Arquivo: Circulo.h
Exemplo: Definição das funções get e set para o atributo
raio
#include “Circulo.h”
void Circulo::setRaio(float r){
if(r >= 0)
raio = r;
}
float Circulo::getRaio(){
return raio;
}
...
Funções get e set
Exemplo: Alterando membro private utilizando a função set
#include “Circulo.h”
main(){
Circulo c1;
Circulo c2(5);
c1.aumentar(10);
c2.aumentar(10);
//CORRETO!!!!
c1.setRaio(3);
}
Funções get e set
Exemplo: Alterando membro private utilizando a função set
#include “Circulo.h”
main(){
Circulo c1;
Circulo c2(5);
c1.aumentar(10);
c2.aumentar(10);
//Chamada correta de função, porém com valor não
//permitido para o raio
c1.setRaio(-5);
}
Exercício em sala
Implemente uma classe Ponto para os pontos bidimensionais (x, y).
Inclua um construtor default, funções get e set para seus atributos,
uma função dist() para retornar a distância do ponto a partir da
origem (0, 0) e uma função print() para imprimir as coordenadas do
ponto.
Dúvidas?
Próxima Aula
Classes

Continue navegando