C++ePOO
• FundamentaçãodeOrientaçãoaObjetos(OO)• SintaxebásicadeC++• Modelagemdesistemasorientadaaobjetos
2
OrientaçãoaObjetos
• Análiseeprojetoorientadosaobjetos=decomposiçãoorientadaaobjetosdeumsistemadesoMware
• Coisas/en)dadesquecompõemosistema=objetos
• Objetossãoinstânciasdeclasses• Análiseestruturada=foconosprocedimentos
OrientaçãoaObjetos
• Análiseeprojetoorientadosaobjetos– Aspectosdis6ntosdeumsistema– Modelológico:estruturadeclasseseobjetos– ModeloTsico:móduloseprocessos
• Evoluçãodaslinguagens– Maismecanismosparacriaçãodeabstrações(linguagemdasolução)
• Criaçãodemodelospararesoluçãodoproblema• Problema->Abstração->Modelosolução
OrientaçãoaObjetos
• Espaçodasoluçãoparaoespaçodoproblema• Objetos– Pequenapartedoproblema– Estadoeoperações– Semelhantesaobjetosdomundoreal(caracterís6casecomportamentos...)
OrientaçãoaObjetos
• OqueéumObjeto(emlinguagenscomoC++)– Éumavariávelque• Armazenadadosestruturados(comoTADs)• Possuioperações(funções)associadas
• Objetos– Atributos• Dados
– Métodos• Funções
OrientaçãoaObjetos
OrientaçãoaObjetos
• ProgramaescritoemlinguagemOO– Conjuntodeobjetosquesecomunicamatravésdemensagensparaaresoluçãodoproblemaabordado(requisitosfuncionais)
• Mensagens– Chamadasafunçõesquepertencemaumobjetoespecífico
• Classessãoos6posdosobjetos
8
OrientaçãoaObjetos
• Classes– Definemcaracterís6cascomunsdosobjetos
• Estadosdosobjetos– Valoresdosatributosindividuais
• Cadaobjetopertenceaumaclasse,quedefineseucomportamentoesuascaracterís6cas
• Conjuntodemétodosdeumobjeto=interface– Encapsulamentodefineavisibilidade
9
OrientaçãoaObjetos
10
Ven6ladorStringmodelo;intnumSerie;intqtdVento;liga();desliga();maisVento();menosVento();
UML
Métodos/Interface
NomedaClasse
Atributos
Ventilador v;v.liga();
OrientaçãoaObjetos
• Interfaceversusimplementação• Encapsulamento– Controledeacessoaatributosemétodos– Público,privado...– Interface=métodospúblicos
• Reuso
11
Encapsulamento
12
Carroprivate:Stringmodelo;Stringchassis;Motorm;public:liga();acelera(int);freia(int);private:liberaCombus6vel(int);freioABS(int);
Encapsulamento
13
Reuso• Composição
14
Carroprivate:Stringmodelo;Stringchassis;Motorm;Rodar[4];Latariala;
Motor1
Roda
Lataria
4
1
Herança
• Hierarquiadeclasses• Classesmaisespecializadasherdamdasmaisgenéricas
• Atributosemétodossãoherdados• Classefilhaéum“6pode”ClassePai
15
Herança
16
Herança
17
PolígonoCorc;desenhar();apagar();definirCor(Corc);area();
Retângulo
desenhar();apagar();area();
Triângulo
desenhar();apagar();area();
Círculo
desenhar();apagar();area();
Polimorfismo• Hierarquiapermitetratarobjetosporsuaclasse(6po)base– Facilitareusoeacréscimodenovassubclasses(sub6pos)
• Polimorfismo– “oquepossuiváriasformas”
• U6lizaromesmonomeparamétodosdiferentes– Implementadosemdiferentesníveisdeumahierarquiadeclasses
18
Polimorfismo• Universal– Inclusão• Poligonop=newCirculo(raio);
– Paramétrico• Funçãopolimórfica(templates)
• Ad-hoc– Sobrecarga• adicionar(Circuloc)• adicionar(Triangulot)
• htp://www.catonmat.net/blog/cpp-polymorphism/
19
OrientaçãoaObjetosemC++
• structxclass• EmC++umastructpodeconterfunçõesefuncionarcomoumaclasse– Visibilidadepadrão,porém,édiferente
20
OrientaçãoaObjetosemC++
• Instanciandoobjetos• Invocandométodos
21
OrientaçãoaObjetosemC++
22
class Retangulo{public:
int altura, largura;int area(){
return altura*largura;}
};main(){
Retangulo r;r.altura=5;r.largura=2;cout << r.area();return 0;
}
OrientaçãoaObjetosemC++
23
class Retangulo{public:
int altura, largura;int area();
};int Retangulo::area()
{return altura*largura;
}main(){
Retangulo r;r.altura=5;r.largura=2;cout << r.area();return 0;
}
OrientaçãoaObjetosemC++
24
class Retangulo{private:
int altura, largura;public:
Retangulo(int a, int l) {altura=a;largura=l;
}int area() {
return altura*largura;}
};main() {
Retangulo r(5, 2);cout << r.area();return 0;
}
OrientaçãoaObjetosemC++
25
#ifndef RETANGULO_H#define RETANGULO_Hclass Retangulo{private:
int altura, largura;public:
int area();};#endif //RETANGULO_H
Retangulo.h
OrientaçãoaObjetosemC++
26
#include ‘Retangulo.h’
int Retangulo::area(){
return altura*largura;}
Retangulo.cpp
OrientaçãoaObjetosemC++• Encapsulamento• ClasseC++– Atributosemétodossãoprivados(private)porpadrão
• StructC++– Atributosemétodossãopúblicos(public)porpadrão
• Friend– “Quebra”oencapsulamento– Classeoufunçãoqueacessamembrosprivadosdeumaoutraclasse
– Evitarusodemasiado
27
OrientaçãoaObjetosemC++
28
OrientaçãoaObjetosemC++
29
class X; // Declaração da classe Xclass Y {
public:void f(X*); // declaração de X...
};class X { // Definição de X
private:int i;public:void initialize();friend void Y::f(X*); // friend pertencente à Yfriend class Z; // A classe Z é friend
};void Y::f(X* x) {
x->i = 47;}
Próximaaula
• FundamentaçãodeOrientaçãoaObjetos(OO).
• ModelagemdesistemasorientadaaobjetosusandoC++
• Modelagemdesistemasorientadaaobjetos.• ConceitosbásicosdeAnáliseeProjetoOrientadoaObjetosu6lizandoaUML(UnifiedModelingLanguage).
30
Referências
• htp://www.cplusplus.com/doc/tutorial/• htp://gillius.org/ooptut/• htp://people.cs.aau.dk/~normark/ap/basic-facili6es.html
• htp://linuxgazete.net/issue55/williams.html
31
Top Related