Upload
bairn
View
33
Download
1
Embed Size (px)
DESCRIPTION
Albert Einsten. Orlando Silva. Ari Barroso. Uma palavrinha importante em POO ( P rogramação O rientada ao O bjeto). reúso. Vou tornar a usar a Relatividade Restrita... Vou reusá-la para desenvolver a Geral!. Vou dar novo uso às minhas músicas... Vou reusá-las em um novo CD!. - PowerPoint PPT Presentation
Citation preview
ESCOLA DE ENGENHARIA
C++Programação Orientada ao Objeto
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 2/22
AlbertAlbertEinstenEinsten
AlbertAlbertEinstenEinsten
OrlandoOrlandoSilvaSilva
OrlandoOrlandoSilvaSilva
AriAriBarrosoBarroso
AriAriBarrosoBarroso
reúsoreúsoreúsoreúso• tornar a usar;• dar novo uso a;• efetuar a reuti- lização.
• tornar a usar;• dar novo uso a;• efetuar a reuti- lização.
Vou tornar a usar a Relatividade Restrita...
Vou reusá-la para desenvolver a Geral!
Vou tornar a usar a Relatividade Restrita...
Vou reusá-la para desenvolver a Geral!
Vou dar novo uso às minhas músicas... Vou
reusá-las em um novo CD!
Vou dar novo uso às minhas músicas... Vou
reusá-las em um novo CD!
Vou efetuar a reutilização das minhas músicas...Vou reusá-las
em um novo ritmo!
Vou efetuar a reutilização das minhas músicas...Vou reusá-las
em um novo ritmo!
Uma palavrinha importante em Uma palavrinha importante em POOPOO ((PProgramação rogramação OOrientada ao rientada ao OObjeto)bjeto)
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 3/22
MarinhoMarinho
AnimalAnimal
MamiferoMamifero
LeaoLeao HomemHomem
InsetoInseto
MoscaMosca BarataBarataPeixePeixe
Introduzindo a Introduzindo a POOPOO
atributosatributos
operaçõesoperações
ClasseClasse
HomoscaHomosca
Herança múltipla:Homosca é um Homem e uma
Mosca. Também é um Animal, Mamífero e Inseto.
Herança múltipla:Homosca é um Homem e uma
Mosca. Também é um Animal, Mamífero e Inseto.
Herança simplesHerança simples
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 4/22
CervideoCervideo
AnimalAnimal
FelinoFelino
GatoGato LeaoLeao
CaninoCanino
LoboLobo CachorroCachorroVeadoVeado
LeaoLoboLeaoLobo
Herança simplesHerança simples
Herança múltiplaHerança múltipla
Sou filho de famosos!
Sou filho de famosos!
ObjetoObjeto
Introduzindo a Introduzindo a POOPOO: brincadeirinha...: brincadeirinha...
ObjetoObjeto
ObjetoObjeto
ObjetoObjeto
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 5/22
1.1. encapsulamento;encapsulamento;1.1. encapsulamento;encapsulamento; Propriedade de uma classe incluir ou encerrar atributos
e operações.
Propriedade de uma classe incluir ou encerrar atributos
e operações.
2.2. hereditariedade;hereditariedade;2.2. hereditariedade;hereditariedade;
Propriedade de uma classe transmitir
atributos e operações para as suas descendentes.
Propriedade de uma classe transmitir
atributos e operações para as suas descendentes.
3.3. polimorfismo.polimorfismo.3.3. polimorfismo.polimorfismo. Propriedade de uma classe se
apresentar sob numerosas formas;
multiforme.
Propriedade de uma classe se
apresentar sob numerosas formas;
multiforme.
virtualvirtual** ->-> newnew deletedelete
--
##
++
privateprivate
protectedprotected
publicpublic
Outras Outras trêstrês palavrinhas importantes em palavrinhas importantes em POOPOO
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 6/22
• é a especificação mais usada da é a especificação mais usada da OMGOMG• é o meio de modelar:é o meio de modelar:
estrutura da aplicaçãoestrutura da aplicação comportamentocomportamento arquiteturaarquitetura processos de negóciosprocessos de negócios estruturas de dadosestruturas de dados
• www.uml.orgwww.uml.org
• é a especificação mais usada da é a especificação mais usada da OMGOMG• é o meio de modelar:é o meio de modelar:
estrutura da aplicaçãoestrutura da aplicação comportamentocomportamento arquiteturaarquitetura processos de negóciosprocessos de negócios estruturas de dadosestruturas de dados
• www.uml.orgwww.uml.org
Object Management Group
Object Management Group
Veja na Internet: é “di grátis”!
Veja na Internet: é “di grátis”!
UML UML ((UUnified nified MModeling odeling LLanguage)anguage)
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 7/22
operaçõesoperações
Nome da ClasseNome da Classe
atributosatributos
em C++class{
...
};
em C++class{
...
};
Exemplo deanotaçãoem UML.
Exemplo deanotaçãoem UML.
Um dos pais da Um dos pais da Programação EstruturadaProgramação Estruturada
Um dos pais da Um dos pais da Programação EstruturadaProgramação Estruturada
As anotações em UML podem se transformar em comentários C++:// de linha/* de bloco */
As anotações em UML podem se transformar em comentários C++:// de linha/* de bloco */
Edsger WybeEdsger WybeDijkstraDijkstra
Edsger WybeEdsger WybeDijkstraDijkstra
iiii jjjj
kkkk
Classes em Classes em UMLUML e C++ e C++((UUnified nified MModeling odeling LLanguage)anguage)
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 8/22
-- ##
++
em C++class{ ... private: ...};
em C++class{ ... private: ...};
em C++class{ ... protected: ...};
em C++class{ ... protected: ...};
em C++class{ ... public: ...};
em C++class{ ... public: ...};
Dois pontos!Dois
pontos!
privadaprivadaprivadaprivada protegidaprotegidaprotegidaprotegida
públicapúblicapúblicapública
Dois pontos!Dois
pontos!
Dois pontos!Dois
pontos!
Visibilidade em Visibilidade em UMLUML e C++ e C++
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 9/22
Exemplo de uma classe com atributos e operações
surpimidas.
Exemplo de uma classe com atributos e operações
surpimidas.
AlunoAluno
Exemplo de uma classe com atributos e operações
representadas.
Exemplo de uma classe com atributos e operações
representadas.
- nome: String- idade: Integer- nome: String- idade: Integer
+ setNome(nome: String)+ getNome(): String# calcMens(): Double- calcDesc(): Double
+ setNome(nome: String)+ getNome(): String# calcMens(): Double- calcDesc(): Double
AlunoAluno
privadoprivado
públicopúblico
protegidoprotegido
Se isto é tudo que você pode ver, vá estudar!
Se isto é tudo que você pode ver, vá estudar!
ChacrinhaChacrinhaChacrinhaChacrinha
Classes e visibilidade em Classes e visibilidade em UMLUML
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 10/22
--
##
++ operaçõesoperações
Nome da ClasseNome da Classe
atributosatributos
em C++private:em C++
private:
em C++protected:em C++
protected:
em C++public:em C++public:
Programamos geralmente dados privados com métodos públicos:• construtores padrão, de cópia, etc (mesmo nome da classe);• destrutores (~);• atribuidores (=);• acessores (set(s) e get(s));• etc.
Programamos geralmente dados privados com métodos públicos:• construtores padrão, de cópia, etc (mesmo nome da classe);• destrutores (~);• atribuidores (=);• acessores (set(s) e get(s));• etc.
Geralmente não significa obrigatoriamente. Pense
sempre em REÚSO!
Geralmente não significa obrigatoriamente. Pense
sempre em REÚSO!
Métodos que realizam acesso, não confunda com
assessor!
Métodos que realizam acesso, não confunda com
assessor!
UMLUML e C++: encapsulamento e C++: encapsulamento
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 11/22
Exemplo de um objeto com classe
identificada.
Exemplo de um objeto com classe
identificada.
luisInacioLula: PresidenteluisInacioLula: Presidente
objetoobjeto classeclassedoispontosdoispontos
sublinhadosublinhado
Exemplo de um objeto não
intitulado com classe
identificada.
Exemplo de um objeto não
intitulado com classe
identificada.
: Presidente: Presidente
Exemplo de um objeto intitulado com classe não identificada.
Exemplo de um objeto intitulado com classe não identificada.
luisInacioLula:luisInacioLula:
Representação de objetos em Representação de objetos em UMLUML
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 12/22
1.1. construtor padrão;construtor padrão;1.1. construtor padrão;construtor padrão;É um construtor que não
requer argumentos. Se você Se você não definir, o C++ definirá!não definir, o C++ definirá!
É um construtor que não requer argumentos. Se você Se você não definir, o C++ definirá!não definir, o C++ definirá!
2.2. construtor de cópia;construtor de cópia;2.2. construtor de cópia;construtor de cópia; É um construtor que possui um único parâmetro do mesmo tipo que a classe. Se você Se você não definir, o C++ definirá!não definir, o C++ definirá!
É um construtor que possui um único parâmetro do mesmo tipo que a classe. Se você Se você não definir, o C++ definirá!não definir, o C++ definirá!
4.4. atribuidor.atribuidor.4.4. atribuidor.atribuidor.É chamado automaticamente quando o objeto sai do
escopo. Se você não definir, Se você não definir, o C++ definirá!o C++ definirá!
É chamado automaticamente quando o objeto sai do
escopo. Se você não definir, Se você não definir, o C++ definirá!o C++ definirá!
3.3. destrutor;destrutor;3.3. destrutor;destrutor;
É um operador utilizado na atribuição (imputação de valores de um objeto para
outro). Se você não definir, Se você não definir, o C++ definirá!o C++ definirá!
É um operador utilizado na atribuição (imputação de valores de um objeto para
outro). Se você não definir, Se você não definir, o C++ definirá!o C++ definirá!
Bjarne StroustrupBjarne StroustrupBjarne StroustrupBjarne Stroustrup
Criador da Linguagem C++Criador da Linguagem C++Criador da Linguagem C++Criador da Linguagem C++
Se você não definir, o C++
definirá!
Se você não definir, o C++
definirá!
QuatroQuatro pontos importantes em C++ pontos importantes em C++
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 13/22
1.1. construtor padrão:construtor padrão:1.1. construtor padrão:construtor padrão:
class NomeDaClasse{ ... NomeDaClasse(); ...};
class NomeDaClasse{ ... NomeDaClasse(); ...};
NomeDaClasse::NomeDaClasse(){ ...}
NomeDaClasse::NomeDaClasse(){ ...}
NomeDaClasse *xp = new NomeDaClasse();...delete xp;
NomeDaClasse *xp = new NomeDaClasse();...delete xp;
NomeDaClasse x;NomeDaClasse x;
NomeDaClasse x = NomeDaClasse();NomeDaClasse x = NomeDaClasse();
Definição da classeDefinição da classe
Definição do
construtor padrão
Definição do
construtor padrão
Chamada do ConstrutorChamada do Construtor
Chamada implícita do Construtor
Chamada implícita do Construtor
Chamada explícita do Construtor
Chamada explícita do Construtor
QuatroQuatro pontos importantes em C++ pontos importantes em C++
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 14/22
2.2. construtor de cópia:construtor de cópia:2.2. construtor de cópia:construtor de cópia:
class NomeDaClasse{ ... NomeDaClasse(NomeDaClasse x); ...};
class NomeDaClasse{ ... NomeDaClasse(NomeDaClasse x); ...};
NomeDaClasse::NomeDaClasse(NomeDaClasse x){ ...}
NomeDaClasse::NomeDaClasse(NomeDaClasse x){ ...}
Definição da classeDefinição da classe
Definição do
construtor de cópia
Definição do
construtor de cópia
QuatroQuatro pontos importantes em C++ pontos importantes em C++
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 15/22
3.3. destrutor:destrutor:3.3. destrutor:destrutor:
class NomeDaClasse{ ... ~NomeDaClasse(); ...};
class NomeDaClasse{ ... ~NomeDaClasse(); ...};
NomeDaClasse::~NomeDaClasse(){ ...}
NomeDaClasse::~NomeDaClasse(){ ...}
Definição da classeDefinição da classe
Definição do
destrutor
Definição do
destrutor
QuatroQuatro pontos importantes em C++ pontos importantes em C++
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 16/22
4.4. atribuidor:atribuidor:4.4. atribuidor:atribuidor:
class NomeDaClasse{ ... NomeDaClasse & operator =(NomeDaClasse &x); ...};
class NomeDaClasse{ ... NomeDaClasse & operator =(NomeDaClasse &x); ...};
NomeDaClasse & NomeDaClasse::operator =(NomeDaClasse &x);{ ...}
NomeDaClasse & NomeDaClasse::operator =(NomeDaClasse &x);{ ...}
Definição da classeDefinição da classe
Definição do
atribuidor
Definição do
atribuidor
QuatroQuatro pontos importantes em C++ pontos importantes em C++
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 17/22
RA a b
retânguloretânguloretânguloretângulo
aaaa
bbbb
Verifique:1. construtor padrão;2. construtor de
cópia;3. destruidor;4. atribuidor;5. acessores.
Verifique:1. construtor padrão;2. construtor de
cópia;3. destruidor;4. atribuidor;5. acessores.
Dennis RitchieDennis RitchieDennis RitchieDennis RitchieBrian KernighanBrian KernighanBrian KernighanBrian Kernighan
Criadores da Linguagem CCriadores da Linguagem CCriadores da Linguagem CCriadores da Linguagem C
Exercício 01: Exercício 01: elabore uma classe C++ para abstrair o elabore uma classe C++ para abstrair o
conceito de retângulo. Faça reúso em uma aplicação console.conceito de retângulo. Faça reúso em uma aplicação console.
30 minutos!30 minutos!
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 18/22
elipseelipseelipseelipse
aaaa
bbbb
4E
a bA
25 minutos!25 minutos!
Verifique:Verifique:1.1. construtor padrão;construtor padrão;2.2. construtor de cópia;construtor de cópia;3.3. destruidor;destruidor;4.4. atribuidor;atribuidor;5.5. acessores.acessores.
Verifique:Verifique:1.1. construtor padrão;construtor padrão;2.2. construtor de cópia;construtor de cópia;3.3. destruidor;destruidor;4.4. atribuidor;atribuidor;5.5. acessores.acessores.
Exercício 02: Exercício 02: elabore uma classe C++ para abstrair o elabore uma classe C++ para abstrair o
conceito de elipse. Faça reúso em uma aplicação console.conceito de elipse. Faça reúso em uma aplicação console.
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 19/22
triângulotriângulotriângulotriângulo
aaaa
bbbbcccc
( ) ( ) ( )TA s s a s b s c 2
a b cs
20 minutos!20 minutos!
Verifique:Verifique:1.1. construtor padrão;construtor padrão;2.2. construtor de cópia;construtor de cópia;3.3. destruidor;destruidor;4.4. atribuidor;atribuidor;5.5. acessores.acessores.
Verifique:Verifique:1.1. construtor padrão;construtor padrão;2.2. construtor de cópia;construtor de cópia;3.3. destruidor;destruidor;4.4. atribuidor;atribuidor;5.5. acessores.acessores.
Exercício 03: Exercício 03: elabore uma classe C++ para abstrair o elabore uma classe C++ para abstrair o
conceito de triângulo. Faça reúso em uma aplicação console.conceito de triângulo. Faça reúso em uma aplicação console.
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 20/22
generalização(pinheiro/bananada)
generalização(pinheiro/bananada)
agregação(diamante)agregação(diamante)
composição(diamante negro)
composição(diamante negro)
dependência(seta)
dependência(seta)
associaçãoassociação
““é um”é um”““é um”é um”
““tem um”tem um”““tem um”tem um”
ClasseAClasseA
ClasseBClasseB
ClasseAClasseA
ClasseBClasseB
ClasseAClasseA
ClasseBClasseB
ClasseAClasseA
ClasseBClasseB
Desenhos:Desenhos:
Relacionamentos emRelacionamentos em UML UML
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 21/22
Tipo SivirinoTipo Sivirino
11
11
**11
11
0, 10, 111
0..10..1
1, 21, 2 11
11
11
11 **
mult. quantidade de objetos
* qualquer número de objetos
m..n de m até n objetos (m < n)
m,n m ou n objetos
n exatamente n objetos
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 22/22
Repitam comigo:Repitam comigo:éhummm, tenhummm, éhummm, éhummm, tenhummm, éhummm,
tenhummm, éhummm, tenhummm, tenhummm, éhummm, tenhummm, éhummm, tenhummm, ...éhummm, tenhummm, ...
Repitam comigo:Repitam comigo:éhummm, tenhummm, éhummm, éhummm, tenhummm, éhummm,
tenhummm, éhummm, tenhummm, tenhummm, éhummm, tenhummm, éhummm, tenhummm, ...éhummm, tenhummm, ...
““tem um”tem um”““tem um”tem um”
Mahatma Gandhi Mahatma Gandhi
““é um”é um”““é um”é um”
Reflexões de GandhiReflexões de Gandhi
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 23/22
CervideoCervideo
AnimalAnimal
FelinoFelino
GatoGato LeaoLeao
CaninoCanino
LoboLobo CachorroCachorroVeadoVeado
LeaoLoboLeaoLobo
Herança simplesHerança simples
Herança múltiplaHerança múltipla
Exemplo de herança em Exemplo de herança em UMLUML
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 24/22
Niklaus WirthNiklaus WirthNiklaus WirthNiklaus Wirth
generalizaçãogeneralização
em C++class Derivada: private Base{ ...};
em C++class Derivada: private Base{ ...};
Derivada: Base
private
private
protected
public
em C++class Derivada: public Base{ ...};
em C++class Derivada: public Base{ ...};
Derivada: Base
private private
protected protected
public public
em C++class Derivada: protected Base{ ...};
em C++class Derivada: protected Base{ ...};
Derivada: Base
private private
protectedprotected
public
Esta é a mais usada!
Esta é a mais usada!
Criador do PascalCriador do PascalCriador do PascalCriador do Pascal
UMLUML e C++: hereditariedade “é um” e C++: hereditariedade “é um”
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 25/22
nome da classenome da classe
multipli-cidade
multipli-cidade
multipli-cidade
multipli-cidade
nome da classenome da classe
papelpapel papelpapelnome da
associaçãonome da
associaçãodireção da associaçãodireção da associação
mult. quantidade
* qualquer número de objetos
m..n de m até n objetos (m < n)
m,n m ou n objetos
n exatamente n objetos
É a parte que cada objeto desempenha na
associação.
É a parte que cada objeto desempenha na
associação.
Identifica a associação e descreve
o relacionamento.
Identifica a associação e descreve
o relacionamento.
Mostra quem dirige a
associação.
Mostra quem dirige a
associação.
Indica quantos objetos tomam
parte na associação.
Indica quantos objetos tomam
parte na associação.
Associação em Associação em UMLUML
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 26/22
AlunoAluno ProfessorProfessor**
estudanteestudante orientado peloorientado pelo orientadororientador
11
OdaliscaOdalisca SultãoSultão4040 11
AlunoAluno ProfessorProfessor11
cumpridorde tarefascumpridorde tarefas
requer tarefas dorequer tarefas do solicitadorsolicitador
1..*1..*
AlunoAluno LousaLousa1..441..44 22
Exemplos de associações em Exemplos de associações em UMLUML
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 27/22
Pense no REÚSO em:1. construtores padrão;2. construtores de cópia;3. destruidor;4. atribuidores;5. acessores set(s) e
get(s);6. operadores.
Pense no REÚSO em:1. construtores padrão;2. construtores de cópia;3. destruidor;4. atribuidores;5. acessores set(s) e
get(s);6. operadores.
60 minutos!60 minutos!
Exercício 04: Exercício 04: elabore uma classe C++ para implementar o elabore uma classe C++ para implementar o
conceito de conceito de complexocomplexo. Faça reúso em uma aplicação console.. Faça reúso em uma aplicação console.
C++ - Programando com ClassesC++ - Programando com Classes Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 28/22
<< >><< >> Esteriótipo: é uma forma fixa, uma coisa que não muda, uma convenção. Em UML ele é utilizado para criar a classificação de elementos que não foram definidos como padrão.
Esteriótipo: é uma forma fixa, uma coisa que não muda, uma convenção. Em UML ele é utilizado para criar a classificação de elementos que não foram definidos como padrão.
3.polimorfis-mo de inclusão
em C++:• virtual• * e ->• new• delete
3.polimorfis-mo de inclusão
em C++:• virtual• * e ->• new• delete
4.polimorfismo paramétricoem C++:template
4.polimorfismo paramétricoem C++:template
TTTT
2.sobrecarga2.sobrecarga
1.sobrescrita1.sobrescritaclasse
abstrataem C++
método = 0
classe abstrataem C++
método = 0
NomeDaClasseNomeDaClasse
Repare noItálico!Repare noItálico!
UMLUML e C++: polimorfismo e C++: polimorfismo