Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf ·...

32
Linguagem de Programação I Carlos Eduardo Ba6sta Centro de Informá6ca - UFPB [email protected]

Transcript of Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf ·...

Page 1: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

LinguagemdeProgramaçãoI

CarlosEduardoBa6sta

CentrodeInformá[email protected]

Page 2: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

C++ePOO

•  FundamentaçãodeOrientaçãoaObjetos(OO)•  SintaxebásicadeC++•  Modelagemdesistemasorientadaaobjetos

2

Page 3: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetos

•  Análiseeprojetoorientadosaobjetos=decomposiçãoorientadaaobjetosdeumsistemadesoMware

•  Coisas/en)dadesquecompõemosistema=objetos

•  Objetossãoinstânciasdeclasses•  Análiseestruturada=foconosprocedimentos

Page 4: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

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

Page 5: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetos

•  Espaçodasoluçãoparaoespaçodoproblema•  Objetos– Pequenapartedoproblema– Estadoeoperações– Semelhantesaobjetosdomundoreal(caracterís6casecomportamentos...)

Page 6: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetos

•  OqueéumObjeto(emlinguagenscomoC++)– Éumavariávelque•  Armazenadadosestruturados(comoTADs)•  Possuioperações(funções)associadas

•  Objetos– Atributos•  Dados

– Métodos•  Funções

Page 7: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetos

Page 8: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetos

•  ProgramaescritoemlinguagemOO– Conjuntodeobjetosquesecomunicamatravésdemensagensparaaresoluçãodoproblemaabordado(requisitosfuncionais)

•  Mensagens– Chamadasafunçõesquepertencemaumobjetoespecífico

•  Classessãoos6posdosobjetos

8

Page 9: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetos

•  Classes– Definemcaracterís6cascomunsdosobjetos

•  Estadosdosobjetos– Valoresdosatributosindividuais

•  Cadaobjetopertenceaumaclasse,quedefineseucomportamentoesuascaracterís6cas

•  Conjuntodemétodosdeumobjeto=interface– Encapsulamentodefineavisibilidade

9

Page 10: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetos

10

Ven6ladorStringmodelo;intnumSerie;intqtdVento;liga();desliga();maisVento();menosVento();

UML

Métodos/Interface

NomedaClasse

Atributos

Ventilador v;v.liga();

Page 11: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetos

•  Interfaceversusimplementação•  Encapsulamento– Controledeacessoaatributosemétodos– Público,privado...–  Interface=métodospúblicos

•  Reuso

11

Page 12: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

Encapsulamento

12

Carroprivate:Stringmodelo;Stringchassis;Motorm;public:liga();acelera(int);freia(int);private:liberaCombus6vel(int);freioABS(int);

Page 13: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

Encapsulamento

13

Page 14: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

Reuso•  Composição

14

Carroprivate:Stringmodelo;Stringchassis;Motorm;Rodar[4];Latariala;

Motor1

Roda

Lataria

4

1

Page 15: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

Herança

•  Hierarquiadeclasses•  Classesmaisespecializadasherdamdasmaisgenéricas

•  Atributosemétodossãoherdados•  Classefilhaéum“6pode”ClassePai

15

Page 16: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

Herança

16

Page 17: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

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();

Page 18: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

Polimorfismo•  Hierarquiapermitetratarobjetosporsuaclasse(6po)base– Facilitareusoeacréscimodenovassubclasses(sub6pos)

•  Polimorfismo– “oquepossuiváriasformas”

•  U6lizaromesmonomeparamétodosdiferentes–  Implementadosemdiferentesníveisdeumahierarquiadeclasses

18

Page 19: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

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

Page 20: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetosemC++

•  structxclass•  EmC++umastructpodeconterfunçõesefuncionarcomoumaclasse– Visibilidadepadrão,porém,édiferente

20

Page 21: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetosemC++

•  Instanciandoobjetos•  Invocandométodos

21

Page 22: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

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;

}

Page 23: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

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;

}

Page 24: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

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;

}

Page 25: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetosemC++

25

#ifndef RETANGULO_H#define RETANGULO_Hclass Retangulo{private:

int altura, largura;public:

int area();};#endif //RETANGULO_H

Retangulo.h

Page 26: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetosemC++

26

#include ‘Retangulo.h’

int Retangulo::area(){

return altura*largura;}

Retangulo.cpp

Page 27: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

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

Page 28: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

OrientaçãoaObjetosemC++

28

Page 29: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

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;}

Page 30: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

Próximaaula

•  FundamentaçãodeOrientaçãoaObjetos(OO).

•  ModelagemdesistemasorientadaaobjetosusandoC++

•  Modelagemdesistemasorientadaaobjetos.•  ConceitosbásicosdeAnáliseeProjetoOrientadoaObjetosu6lizandoaUML(UnifiedModelingLanguage).

30

Page 31: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

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

Page 32: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-cppemodelagemoo-171_pt1.pdf · Linguagem de Programação I Carlos Eduardo Basta Centro de Informáca - UFPB bidu@ci.ufpb.br

LinguagemdeProgramaçãoI

CarlosEduardoBa6sta

CentrodeInformá[email protected]