linguagem de programação i -...

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

Upload: vuongdung

Post on 25-Dec-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

LinguagemdeProgramaçãoI

CarlosEduardoBa6sta

CentrodeInformá[email protected]

Page 2: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

C++ePOO

•  Mo6vaçãoparaousodeC++paraoaprendizadodePOO

•  QuandousarCequandousarC++•  C++versusJava•  SintaxebásicadeC++•  AmbientesdedesenvolvimentoC++

2

Page 3: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

Mo6vaçãoparaousodeC++

3

Page 4: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

Mo6vaçãoparaousodeC++

•  Aprendizadoincremental(apar6rdeC)•  Controlederecursosedesempenho– Gerênciadememória“manual”– AbstraçõesPOO+Responsabilidade

•  Maiorcontroledacompilação•  AprenderC++facilitaoaprendizadoposteriordeJava

•  Maisfácildeseo6mizarodesempenho•  C++nãoélinguagemparapreguiçosos

4

Page 5: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

QuandousarCequandousarC++•  C–  Códigodebaixonível(drivers,kernel)– Disposi6vosembarcados(suporte)–  Fortesrequisitosdedesempenho*

•  C++–  Sistemasdeinfraestrutura–  90%dosjogossãoemC++–  Sistemasoperacionais(Windows,*nix)

•  OndeC/C++nãosãopopulares...– Disposi6vosmóveis(iOSeAndroid)– Web

5

Page 6: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

C++versusJava

•  Padronização– C++•  ISO/IEC14882•  ISO/IECJTC1/SC22/WG21commikee•  C++11

–  Java•  JavaLanguageSpecifica6on(Oracle)

6

Page 7: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

C++versusJava•  C++–  EstendeC(linguagemimpera6va/procedural)–  AcrescentasuporteaPOOde6pagemestá6ca

•  Tratamentodeexceções•  Gerenciamentodeescopo•  Metaprogramação(templates)•  Bibliotecapadrão(STD)•  Writeonce,compileanywhere(WOCA)

•  Java•  SintaxefortementebaseadaemC/C++•  Máquinavirtual(JVM)•  Concorrência•  JNI–JavaNa6veInterface•  Writeonce,runanywhere(WORA)

7

Page 8: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

C++versusJava

•  AssimilamalgunsconceitosdePOOdeformadiferente

•  hkp://en.wikipedia.org/wiki/Comparison_of_Java_and_C++

8

Page 9: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

•  HelloWorld•  Declarações•  I/O•  DeStructsemCaClassesemC++

9

Page 10: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

10

#include <iostream> // incluir biblioteca de IO int main() // função onde o programa é iniciado { cout << "Hello World"; // exibe "Hello World" return 0; // devolve ao SO. o valor 0 (sucesso)}

Page 11: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

•  Declarações– EmANSICasdeclaraçõesantecedemasinstruções

– EmC99eC++asdeclaraçõeseinstruçõespodemsemisturar

– Declaraçõesnacondiçãodeumainstruçãodo6poif•  Servecomoumarestriçãodeescopo(oblocodefinidopeloif)

11

Page 12: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

12

double g(int a, double d){ return a * d;}void f(double p){ int i = 0; double result;

//... if (p <= 10.0) i++; //...

result = g(i,p); }

int main(){ f(5.0);}

Page 13: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

13

double g(int a, double d){ return a * d;}void f(double p){ int i = 0;

// ... if (p <= 10.0) i++; // ...

double result = g(i,p); //Declara e usa result }

int main(){ f(5.0);}

Page 14: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

•  Declaraçãodentrodeif– Atribuiçãodeveiniciarcondição

•  Declaraçãoemoutrasinstruções/laços

14

// se get() retorna valor diferente de NULL// realiza instrução w->fire()if(weapon *w = get()) { w->fire();}

if(int i = value) ...;for(...; int i = value; ...) ...;switch(int i = value) ...;while(int i = value) ...;

Page 15: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

•  EntradaeSaídaemC++– <ostream>e<istream>

•  Operadores– >>(pegarde)– <<(porem)

•  prinxescanf– Nãosãogeneralizáveispara6posdefinidospelousuário

15

Page 16: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

•  cin–entradapadrão•  cout–saídapadrão•  cerr–saídadeerropadrão•  Estados–  stream.good()–  stream.eof()–  stream.fail()–  stream.bad()

16

Page 17: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

17

#include <iostream>#include <string>

using namespace std;

int main(){ int i;

while (cin >> i) // boolean - conversão implícita cout << 2*i << " ";

cout << "The End";

}

Page 18: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++•  Manipuladores

–  AceitospelosoperadoresdeE/S<<e>>–  Alteraoestadodostream–  Ponteiroparaumafunção

18

#include <iostream>#include <iomanip>#include <string>

using namespace std;

int main(){

cout << 17 << endl << showbase << hex << 17 << endl << oct << 17 << endl; }

//17//0x11//021

Page 19: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

19

#include <iostream>#include <iomanip>#include <string>

using namespace std;

int main(){ double d = 3.12345678;

cout << d << endl << scientific << d << endl << fixed << setprecision(10) << setfill('#')

<< setw(18) << d << endl;}

//3.12346//3.123457e+00//######3.1234567800

Page 20: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

•  Deestruturasaclasses...•  Definirumaestruturagenéricaquedepoispodeteralgumasdesuaspartesmodificadas

•  Hierarquia“6pode”•  Ponteirosparafunções•  AntesdenosaprofundarmosnosconceitosdoparadigmaOO...

20

Page 21: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

•  Definindoclasses/objetosemC++•  Umobjetoéumainstânciadeumaclasseereferenciaalgo(delimitado)namemória

•  DeclarandoclassesemC++•  Atributos•  Funçõesmembro(métodos)

21

Page 22: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

22

class Casa{public: int numero, numQuartos;

bool jardim;};

main(){

Casa minhaCasa;minhaCasa.numero=500; minhaCasa.numQuartos=4;minhaCasa.jardim=1;return 0;

}

Page 23: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

23

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 24: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

24

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 25: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

•  Construtoreseinicializaçãodevariáveisdeumobjeto– Variáveisnecessáriasparaarealizaçãodefuncionalidadesoferecidaspeloobjeto

•  Paracadamembro(instância)umainicializaçãodis6nta

25

Page 26: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

SintaxebásicadeC++

26

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 27: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

•  Sistemadecontroledeversõesdearquivos•  Comumenteusadocomoferramentaparacontroledeversõesdeartefatodeso/ware

•  CriadoporLinusTorvaldsem2005•  Velocidade,integridade,suporteaworkflowsnãolineares

27

Page 28: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

CVSeSVN

Page 29: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

Page 30: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

•  Snapshotsenãodeltas•  “Naturalmente”Distribuído– commaioriadasoperaçõesfeitaslocalmente

•  Garan6adeintegridade

Page 31: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

•  3estadosdoarquivo– Consolidado(commited)– Modificado(modified)– Preparado(staged)

Page 32: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

Page 33: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

•  seusrepositórioslocaisconsistememtrês"árvores"man6daspelogit.aprimeiradelasésuaWorkingDirectoryquecontémosarquivosvigentes.

•  asegundaIndexquefuncionacomoumaáreatemporária

•  finalmenteaHEADqueapontaparaoúl6mocommit(confirmação)quevocêfez.

33

Page 34: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

•  OworkflowbásicodoGitpodeserdescritoassim:– Vocêmodificaarquivosnoseudiretóriodetrabalho.

– Vocêselecionaosarquivos,adicionandosnapshotsdelesparasuaáreadepreparação.

– Vocêfazumcommit,quelevaosarquivoscomoelesestãonasuaáreadepreparaçãoeosarmazenapermanentementenoseudiretórioGit.

Page 35: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git•  arquivo/etc/gitconfig:Contémvaloresparatodosusuários

dosistemaetodososseusrepositórios.Sevocêpassaraopção--systemparagitconfig,eleleráeescreveráapar6rdestearquivoespecificamente.

•  arquivo~/.gitconfig:Éespecíficoparaseuusuário.VocêpodefazeroGitlereescreverapar6rdestearquivoespecificamentepassandoaopção--global.

•  arquivodeconfiguraçãonodiretóriogit(ouseja,.git/config)dequalquerrepositórioquevocêestáu6lizandonomomento:Específicoparaaqueleúnicorepositório.Cadanívelsobrepõemovalordonívelanterior,sendoassimvaloresem.git/configsobrepõemaquelesem/etc/gitconfig.

Page 36: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

•  $gitconfig--globaluser.name"JohnDoe"•  [email protected]

Page 37: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git•  $gitinit•  $gitclonegit://github.com/schacon/grit.git

•  gitpull

•  $gitadd*.c•  $gitaddREADME•  $gitcommit-m'ini6alprojectversion’•  $gitpushoriginmaster

Page 38: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

•  gitremoteaddorigin<URL_PARA_SERVIDOR>

•  gitcheckout–bNOME_NOVO_BRANCH•  gitcheckoutmaster•  gitpushorigin<NOME_BRANCH>•  gitbranch–dNOME

38

Page 39: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

•  gitdiff<arquivo>

•  gitcheckout<arquivo>

39

Page 40: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

git

Page 41: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

Autotools

•  Sistemadebuild•  Instalaçãoeconfiguração•  Instalaçãodedadoseprogramasseparadamente

•  Cross-compiling•  Rastreamentodedependências•  Aninhamentodebuilds

Page 42: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

•  Ferramentasparacriarumsistemadebuildportável,completoeauto-con6do(compa�velcomGNU)

•  $./configure;make;makeinstall•  configure.aceMakefile.am

Page 43: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

Helloworld!/* hello.c: A standard "Hello, world!" program */ #include <stdio.h> int main(int argc, char* argv[]){ printf("Hello, world!\n"); return 0;}

#Makefile:AstandardMakefileforhello.call:helloclean:rm-fhello*.o

Page 44: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

HelloWorld

$ lsMakefile hello.c$ makecc hello.c -o hello$ lsMakefile hello* hello.c$ ./hello Hello, world!$

Page 45: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

HelloWorld

•  Autoconf•  configure.ac(configure.innasversõesan6gas)– Criadousandooautoscan

$ autoscan$ lsMakefile autoscan.log configure.scan hello* hello.c$ mv configure.scan configure.ac$

Page 46: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

HelloWorld

$ autoconf$ lsMakefile autoscan.log configure.ac hello.cautom4te.cache/ configure* hello*$

$ mv Makefile Makefile.in$ lsMakefile.in autoscan.log configure.ac hello.cautom4te.cache/ configure* hello*$

Page 47: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

Referências

•  hkp://www.cplusplus.com/doc/tutorial/•  hkp://gillius.org/ooptut/•  hkp://people.cs.aau.dk/~normark/ap/basic-facili6es.html

•  hkp://linuxgazeke.net/issue55/williams.html•  https://git-scm.com

47

Page 48: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

Próximasaula

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

•  SistemasorientadaaobjetosusandoC++

48

Page 49: Linguagem de Programação I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-alinguagemcpp_pt2-171.pdf · Mo6vação para o uso de C++ • Aprendizado incremental (a par6r

LinguagemdeProgramaçãoI

CarlosEduardoBa6sta

CentrodeInformá[email protected]