Introdução à Programacao em Processing

4.366 visualizações

Publicada em

Publicada em: Educação, Tecnologia
1 comentário
6 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
4.366
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
182
Comentários
1
Gostaram
6
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Introdução à Programacao em Processing

  1. 1. IntroduçãoàProgramaçãoem Processing<br />Programa de DoutoramentoemCiência e Tecnologiadas Artes – Arte Interactiva<br />Jorge C. S. Cardoso<br />http://jorgecardoso.eu<br />19 Fevereiro 2011<br />
  2. 2. Tópicos<br />Conceitos de programação de computadores<br />Hardware, evoluçãodas linguagens de programação, códigofontevscódigomáquina, máquinavirtual <br />Estruturasbásicas de programaçãoem Processing<br />Variáveis, condições, ciclos, funções<br />Programaçãoorientada a objectos (OOP)<br />Classes, objectos, herança, construtores, destrutores, encapsulamento, herança, method overriding<br />
  3. 3. Hardware<br />Processador<br />CPU (Central Processing Unit)<br />Éa parte de um sistema de computadorqueexecuta as instruções de um programa de computador<br />
  4. 4. Hardware<br />Memória RAM (Random Access Memory)<br />Volátil (precisa de alimentaçãoeléctricaparapreservaros dados)<br />O CPU lêe escrevedirectamenteparaestamemória<br />O programaque o CPU executaestáescritonamemória RAM <br />
  5. 5. Hardware<br />Memóriapersistente<br />Nãovolátil (mantémos dados mesmosemalimentaçãoeléctrica)<br />Exemplos<br />Disco duro<br />Memória Flash (cartões SD, Flash pen, …)<br />Osprogramassãoarmazenadosnestamemória<br />Quandoosexecutamospassampara a RAM<br />
  6. 6. Linguagens de Programação<br />Programa<br />Sequência de instruçõesque o CPU executa<br />As instruçõesestãona RAM<br />Exemplo<br />Somar 3 + 5 e multiplicar o resultadopor2<br />Como éque o CPU fazisto? <br />
  7. 7. CPU<br />Possui memória interna <br />Muito pouco espaço<br />As unidades de memória interna do processador chamam-se registos <br />Conhece uma lista de instruções<br />Percorre a memória RAM e lê e executa instrução a instrução<br />
  8. 8. Evolução das linguagens<br />Osprimeiros “programadores” de computadorescreviamprogramasemnúmeros<br />Usavamdirectamente a tabela de instruções do processador<br />muitosujeito a erros...<br />muitotrabalhoso...<br />Criou-se umalinguagemmaisfácil de decorar e utilizar, baseadaemmnemónicas<br />Assembly Language <br />.model small<br />.stack<br />.data<br />message db "Hello world, I'm learning Assembly !!!", "$"<br />.code<br />main proc<br />movax,seg message<br />movds,ax<br />mov ah,09<br />lea dx,message<br />int 21h<br />mov ax,4c00h<br />int 21h<br />main endp<br />end main<br />
  9. 9. Evolução das linguagens<br /><ul><li>As linguagens de programação foram evoluindo para sintaxes mais próximas da linguagem natural
  10. 10. Linguagens de alto-nível</li></ul>source: http://chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf<br />
  11. 11. Códigofonte<br /><ul><li>Texto que o programador escreve numa determinada linguagem de programação (e.g., ObjC, Java, ...)</li></ul>int addTwoNumbers( int num1, int num2 ){    //This adds two numbers    return num1 + num2;    /* Some other comment    just to show how to do it    for multiple lines. */}<br />
  12. 12. CódigoMáquina<br />.code<br />main proc<br />movax,seg message<br />movds,ax<br />mov ah,09<br />lea dx,message<br />int 21h<br />mov ax,4c00h<br />int 21h<br />main endp<br />end main<br /><br /><ul><li>Instruçõesexecutadasdirectamentepeloprocessador
  13. 13. O códigomáquinaresulta de um processo de tradução do códigofontenumalinguagementendidadirectamentepeloprocessador (sequência de números)</li></li></ul><li>Linguagens de Programação:  Criação de um executável<br /><ul><li>Compilador
  14. 14. Convertecódigofonteemcódigomáquina (específicoparacada CPU - e.g. Intel Atom, Apple A4)
  15. 15. Códigomáquinageradopelocompiladortambémconhecidocomo "códigoobjecto"
  16. 16. Linker
  17. 17. Combinaosdiferentesmódulos de códigomáquina (i.e. previamentecompilados) e gera o ficheiro final queiráserexecutadopela CPU
  18. 18. Permite o uso de bibliotecasdisponibilizadasporterceiros</li></li></ul><li>Linguagens de Programação:  Criação de executávelem Java<br /><ul><li>Compilador
  19. 19. A linguagem Java é compilada em código máquina para um processador virtual (máquina virtual)
  20. 20. O código máquina resultante é chamado "bytecode“
  21. 21. Em Java não existe necessidade de "linkagem"
  22. 22. Uma aplicação Java consiste num conjunto destes ficheiros (e não apenas um)
  23. 23. A máquina virtual trata de carregar para a memória os ficheiros necessários à medida que o programa executa</li></li></ul><li>Linguagens de Programação:Máquina Virtual Java<br /><ul><li>A máquina virtual Java é um processador que não existe fisicamente (apenas existe a sua especificação)
  24. 24. Este processador virtual é implementado através de software em qualquer computador
  25. 25. Para correr um programa Java temos de ter instalado este processador virtual (Java Virtual Machine - JVM)
  26. 26. A vantagem é que o nosso programa corre em qualquer plataforma que tenha uma JVM instalada (só temos de compilar uma vez)</li></li></ul><li>Linguagens de Programação<br /><ul><li>O programapodeserdescritousandováriostipos de linguagens:</li></ul>“Natural”<br />"tell Finder to open myDocument.doc”<br />Diagrama<br />Programação <br />(e.g., Java, C, Obj-C, C++)<br />void draw() {<br />background(0);<br />/* actualizar posição */<br />x = x + dirX;<br />if ( x < minX || x > maxX ) { <br />    dirX = -dirX;<br />    x = x + dirX;<br />    lX = x;<br />}<br />
  27. 27. Linguagens de Programação<br />Na descrição de um programaéessencialdefinir:<br />Ponto de entrada. Qual a primeirainstrução a executar?<br />Sequência: comoavanço de instruçãoeminstrução?<br />
  28. 28. Linguagens de Programação<br /><ul><li>Java
  29. 29. Permite a criação de programasquepodemserexecutadosemváriasplataformassemmodificação
  30. 30. A suautilizaçãotornou-se maisconhecidaatravés das applets
  31. 31. pequenosprogramasquepodemserexecutadosnum browser.
  32. 32. Osprogramasescritosem Java sãocompiladosnumcódigomáquina virtual queédepois (aquando da execução do programa) transformadoemcódigomáquinareal</li></li></ul><li>Linguagens de Programação<br />Processing<br />“Processing is an open source programming language and environment for people who want to create images, animations, and interactions. Initially developed to serve as a software sketchbook and to teach fundamentals of computer programming within a visual context, Processing also has evolved into a tool for generating finished professional work. Today, there are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning, prototyping, and production.” – http://processing.org<br />
  33. 33. Processing<br />“Free to download and open source<br />Interactive programs using 2D, 3D or PDF output<br />OpenGL integration for accelerated 3D<br />For GNU/Linux, Mac OS X, and Windows<br />Projects run online or as double-clickable applications<br />Over 100 libraries extend the software into sound, video, computer vision, and more...<br />Well documented, with many books available” – http://processing.org<br />
  34. 34. Processing Examples<br />Animation <br />Nokia Friends (http://postspectacular.com/process/20080810_nokiafriends)<br />ImaViz – Sound Visualizer (http://www.openprocessing.org/visuals/?visualID=9923hh)<br />“Music”<br />Ball droppings (http://balldroppings.com/js/)<br />PSO <br />Video<br />Catalina music video (http://moullinex.tumblr.com/post/3180520798/catalina-music-video)<br />Papa Roach – Getting away with murder (http://processing.org/exhibition/works/papa/index.html)<br />3D<br />Hair Ball (http://www.openprocessing.org/visuals/?visualID=12399)<br />(Generative) Design<br />Marius Watz (http://www.unlekker.net)<br />http://artes.ucp.pt/blogs/index.php/PMultimedia/2009/10/03/capas-de-livros<br />Games <br />Pong Multiplayer (http://artes.ucp.pt/ftp/a0306005/index.html)<br />Instalations<br />My little piece of privacy (http://www.niklasroy.com/project/88/my-little-piece-of-privacy/)<br />
  35. 35. Processing<br />IDE (Integrated Development Environment)<br />
  36. 36. 2/18/11<br />Jorge Cardoso<br />22<br />Processing - eixos da janela gráfica<br />
  37. 37. Processing<br />Algumasinstruções<br />size<br />background<br />line, rect, ellipse, curve<br />fill, stroke<br />noFill, noStroke<br />
  38. 38. Exemplo 1<br />size(400, 600);<br />background(255);<br />stroke(0);<br />strokeWeight(3);<br />line(100, 150, 300, 450);<br />line(100, 450, 300, 150);<br />// curva superior<br />strokeWeight(2);<br />stroke(0);<br />noFill();<br />curve(0, 0, 100, 150, 300, 150, 400, 0);<br />// pontos de controlo<br />//fill(255, 0, 0);<br />//noStroke();<br />//ellipse(0, 0, 5, 5);<br />//ellipse(400, 0, 5, 5);<br />//curva inferior<br />stroke(0);<br />noFill();<br />curve(0, 600, 100, 450, 300, 450, 400, 600);<br />
  39. 39. Introduçãoàprogramação <br />Comentários<br />Variáveis<br />Condições<br />Ciclos<br />Funções<br />
  40. 40. Aviso!<br />http://xkcd.com/859/<br />
  41. 41. IntroduçãoàProgramação<br />Comentários<br />Servempara o programador se ajudar a simesmo a lembrarporqueéque fez as coisas de determinada forma<br />São ignoradaspelocompilador<br />// Comentáriode umalinha<br />/* Comentário<br /> de <br />várias<br />linhas */<br />intaddTwoNumbers( int num1, int num2 ){    //a comment: add the two numbers    int result = num1 + num2;<br />    /* Some other comment    just to show how to do it    for multiple lines. */    return result;}<br />
  42. 42. Variáveis<br />Variáveissãouma forma de armazenarvaloresdurante a execução de um programa<br />Uma variávelé um nomequeutilizamosparanosreferirmos a um valor<br />Podemosalterar o valor durante o programa<br />Sempreque o nomeéutilizado no programaéautomaticamentesubstituídopelo valor correspondente<br />intsomeNumber;<br />intanotherNumber;<br />int result;<br />someNumber = 3;<br />anotherNumber = 2;<br />//result stores the value 3 * 2 = 6<br />result = someNumber * anotherNumber;<br />
  43. 43. Variáveis<br />Antes de podermosusarumavariáveltemos de a declarar. <br />A declaraçãoindica o tipo de dados que a variávelvaiguardar.<br />Inteiros (int, long) <br />Decimais(float, double)<br />Lógicos (boolean)<br />Caracteres (char)<br />Sintaxe:<br /><tipo> nomeDaVariavel;<tipo> nomeDaVariavel = <valorinicial>;<br />intmyNumber;<br />long anotherNumber = 13;<br />float aFloatNumber = 0.24;<br />double aDoublePrecisionNumber = 1.23e2;<br />booleanisActive = true;<br />char aLetter = 'P';<br />
  44. 44. Variáveis<br />Para guardarmos um valor numavariáveltemos de atribuí-lo àvariável.<br />minhaVariavel = <valor>;<br />Aquiloqueatribuimos a umavariávelé o resultado de umaexpressão. Uma expressãopodeser:<br />Literal : Um valor escritodirectamente no código<br />idade= 33; // 33 é um literal<br />Variável: O valor de umavariável<br />idade= idadeJoao; // idadeJoaoéoutravariável<br />Função: O valor devolvidoporumafunçãodefinidapreviamente<br />idade= random(10); // random éumafunção <br />Expressõesanterioresligadas com operadoresaritméticos : Definiçãorecursiva!<br /> idade= idadeJoao + 10 * 3;<br />
  45. 45. Variáveis<br />Algumasrestrições no uso de nomesemvariáveis:<br />Nomes das variáveistêmcomeçarcom umaletra do alfabeto (dígitosnãosãopermitidos) oupor um underscore (_)<br />Nomes de variáveispodemconterletras e dígitos, mas espaçosou outros caracteresespeciaisnãosãopermitidos.<br />Osnomes de variáveissão case sensitive (e.g. myNumberédiferente de mynumber)<br />Palavrasreservadas do Java nãopodemserusadascomonomes de variáveis (e.g. int, float, for, while, do, break, ...)<br />Osnomes das variáveisdevemserescolhidos de forma a tornar o seusignificado o maisclaro e legívelpossível.<br />
  46. 46. Exemplo 2<br />intcenterX = 100;<br />intcenterY = 100;<br />size(400, 600);<br />background(255);<br />stroke(0);<br />strokeWeight(3);<br />line(centerX-100, centerY-150, centerX+100, centerY+150);<br />line(centerX-100, centerY+150, centerX+100, centerY-150);<br />// curva superior<br />strokeWeight(2);<br />stroke(0);<br />noFill();<br />curve(centerX-200, centerY-300, centerX-100, centerY-150, centerX+100, centerY-150, centerX+200, centerY-300);<br />//curva inferior<br />stroke(0);<br />noFill();<br />curve(centerX-200, centerY+300, centerX-100, centerY+150, centerX+100, centerY+150, centerX+200, centerY+300);<br />
  47. 47. Operadores<br />Operadoresaritméticos<br />+ (adição)<br />- (subtracção)<br />* (multiplicação)<br />/ (divisão, inteiraoufraccionária)<br />% (resto da divisãointeira - modulo)<br />Osoperadoresnumaexpressãosãoaplicados da esquerdapara a direita, mas os operadores *, / e % têmprecedênciasobre + e -<br />Se quisermosalterar a precedência, temos de usarparêntesis:  (  )<br />1+2*3 = 1+6 = 7<br />(1+2)*3 = 3*3 = 9<br />
  48. 48. Exercício 1<br />Crie um programaem Java que:<br />armazeneemduasvariáveisosvalores 5 e 2<br />realize a divisão entre as variáveis (i.e. 5 / 2)<br />guarde o resultadonumavariável<br />imprima o resultado da operação<br />Decisões a tomar:<br />Quetipo de variáveisdefinir?<br />int, float, double, ...??<br />Quetipo a usarpara o resultado da divisão?<br />int, float, double, ...??<br />Existemdiferenças no resultado?<br />divisãointeira VS divisãovírgulaflutuante...<br />
  49. 49. Solução<br />intaNumber = 5;<br />intanotherNumber = 2;<br />float aFloat = 2.0f;<br />float result;<br />result = aNumber / anotherNumber;<br />println(result);<br />
  50. 50. Condições<br /><ul><li>Emquasetodososprogramasénecessárioexecutaralgumasacçõesapenas se umadeterminadacondição for verdadeira...</li></li></ul><li>Condiçõesif<br /><ul><li>Na sua forma mais simples a estruturaif resume-se a executar um conjunto de acções se determinadacondição for verdadeira. 
  51. 51. As chavetas{ }delimitam as acçõesexecutadascondicionalmente. </li></ul>if ([condição]) <br />{ <br />    [acções] <br />}<br />
  52. 52. Condiçõesif<br />A condiçãoéumaexpressão do tipoboolean <br />Literal true ou false <br />Variável (boolean) com o valor true ou false <br />Expressão com operadorescondicionais<br />booleanisActive = true;<br />if(isActive) //eqv. a if (isActive == true)<br />{<br />    //do something...<br />    isActive = false;<br />}<br />
  53. 53. Exemplo 3<br />intcenterX = 200;<br />intcenterY = 300;<br />boolean v1 = false;<br />size(400, 600);<br />background(255);<br />stroke(0);<br />strokeWeight(3);<br />line(centerX-100, centerY-150, centerX+100, centerY+150);<br />line(centerX-100, centerY+150, centerX+100, centerY-150);<br />strokeWeight(2);<br />stroke(0);<br />noFill();<br />if (v1) {<br /> // curva superior<br /> curve(centerX-100-100, centerY-150-150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150-150);<br /> // curva inferior<br /> curve(centerX-100-100, centerY+150+150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150+150);<br />} <br />else {<br /> // curva superior<br /> curve(centerX-100-100, centerY-150+150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150+150);<br /> // curva inferior<br /> curve(centerX-100-100, centerY+150-150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150-150);<br />}<br />
  54. 54. Condições if<br />As condiçõesusadasnos testes podemusarosoperadorescondicionais: <br />igual a: == (atenção!) <br />maior do que: > <br />menor do que: < <br />maiorouigual a: >= <br />menorouigual a: <= <br />diferente: != <br />O resultado de umaoperaçãocondicionalé um valor true ou false<br />intaNumber = 10;<br />intanotherNumber = 6;<br />boolean correct = false; <br />if(9 == aNumber)<br />    correct = true;<br />if (anotherNumber > aNumber)<br />    aNumber = anotherNumber;<br />    <br />
  55. 55. Condições if<br />Algumasvariantes da estrutura if:<br />If... Else... <br />If... Else if... <br />If... Else if... Else...<br />Switch<br />
  56. 56. Condições if... else...<br />O iftambémnospermiteexecutaracções se a condição for falsa<br />if (<condição>) {<br /><acções A> //executado se a condição for true...<br />} else {<br />    <acções B> //executado se a condição for false...<br />}<br />
  57. 57. Condições if... else if<br />Épossívelcombinar ifs sequencialmente<br />if (<condição A>) {<br />    <acções A><br />} else if (<condição B>){<br />     <acções B><br />} else {<br />     <acções C><br />}<br />
  58. 58. OperadoresLógicos<br />Épossíveltestarcondiçõescomplexasatravés dos operadoreslógicos: operadoresquecombinamcomparações simples:<br />AND : As duascomparaçõestêm de serverdadeirasaomesmo tempo<br />OR : Pelomenosuma das comparações tem de serverdadeiro<br />NOT : Inverte (i.e. nega) o valor da comparação<br />
  59. 59. OperadoresLógicos<br />AND : &&<br />OR : ||<br />NOT : !<br />if (x > 10 && x < 20) {<br />println(“Entre 10 e 20”);<br />}<br />if (x < 10 || x > 20) {<br />println(“Fora do intervalo [10; 20]”);<br />}<br />if (!(x < 10)) {<br />println(“X não é menor do que 10”);<br />}<br />
  60. 60. Exemplo 4<br />intcenterX = 200;<br />intcenterY = 300;<br />boolean v1 = true;<br />boolean v2 = true;<br />size(400, 600);<br />background(255);<br />stroke(0);<br />strokeWeight(3);<br />line(centerX-100, centerY-150, centerX+100, centerY+150);<br />line(centerX-100, centerY+150, centerX+100, centerY-150);<br />strokeWeight(2);<br />stroke(0);<br />noFill();<br />if (v2) {<br /> // curva superior<br /> curve(centerX-100-100, centerY-150-150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150-150);<br /> // curva inferior<br /> curve(centerX-100-100, centerY+150+150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150+150);<br />}<br />if (v1) {<br /> // curva superior<br /> curve(centerX-100-100, centerY-150+150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150+150);<br /> // curva inferior<br /> curve(centerX-100-100, centerY+150-150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150-150);<br />}<br />if (v1 && v2) {<br />strokeWeight(1);<br /> fill(150);<br /> ellipse(centerX, centerY-150-20, 40, 40);<br />}<br />
  61. 61. Exercício 2<br />Implementeum programaque:<br />Defina 3 variáveisparaarmazenartrêsinteirosàescolha (num1, num2 e num3)<br />Teste se num1 éigual, maioroumenorque num2, e imprimaumamensagem do tipo "7 émaior do que 3".<br />No caso de num1 sermenorque num2, verifique se num3 estádentro do intervalo [num1, num2], e emcasoafirmativoimprimaumamensagem do tipo "7 está entre 2 e 15".<br />Divida num1 por num2, imprimindo o resultado, tendo o cuidado de verificar se num2 édiferente de zero!<br />Divisõespor zero em Java provocamo "crash" da aplicação!<br />
  62. 62. Exercício 2<br />int num1 = 5;<br />int num2 = 12;<br />int num3 = 7;<br />if(num1 == num2) {<br />    println(num1 + “ is equal to ” + num2);<br />} else if(num1 > num2){<br />    println(num1 + “ is bigger than “ + num2);<br />} else {<br />    println(num1 + “ is smaller than ” + num2);<br /> <br />    if (num3 > num1 && num3 < num2) {<br />    println(num3 + “ is between “ + num1 + “ and “ + num2);<br />    }<br />}<br />if(num2 != 0){<br />    println("A divisão de ” + num1 + “ por “ + num2 + “ é “ + ((float)num1/num2));<br />}<br />
  63. 63. Ciclos<br />Osciclospermitem-nosexecutar um conjunto de instruçõesrepetidamente<br />Existemduas classes de ciclos:<br />Ciclosqueexecutam um númeropré-determinado de vezes: for<br />Ciclosqueexecutamenquantoumacondiçãoéverdadeira: do e while<br />
  64. 64. Ciclofor<br />Executado um númeropré-determinado de vezes<br />for (<inicialização>; <condição>; <incremento>) <br />{<br />    <acções>}<br />Variável de cicloinicia-se em zero (e declara-se dentro do própriociclo)<br />Condição simples com o limite de iterações<br />Incremento da variávelemumaunidade (através do operadorincremento ++)<br />for (inti = 0; i < 10; i++)<br />{ <br />    println("Counting… ” + i); <br />}<br />
  65. 65. Exemplo 5<br />if (v1 && v2) {<br />strokeWeight(1);<br />fill(150);<br />for (int i = 0; i < 5; i++) {<br />ellipse(centerX, centerY-150-20-100+i*20, 40, 40);<br /> }<br /> /*<br />int n = 10;<br />for (int i = 0; i < n; i++) {<br />ellipse(centerX, centerY-150-20-100+i*100/n, 40, 40);<br /> }*/<br />/*<br />for (int y = centerY-150-20-100; y < centerY-150-20; y = y + 1) {<br />ellipse(centerX, y, 40, 40);<br /> }*/ <br />}<br />
  66. 66. Ciclo while<br />Executa um conjunto de instruçõesenquantoumacondição for verdadeira<br />O testeéfeito antes da execução<br />while (<condição>) <br />{<br />    <acções><br />}<br />inti = 0;<br />while (i <= 10) {<br />    println("Counting... “ + i);<br />    i = i + 1;<br />}<br />
  67. 67. Ciclo do<br />Executa um conjunto de instruçõesenquantoumacondição for verdadeira<br />O testeéfeitodepois da execução<br />do {<br /> <acções><br />} while (<condição>);<br />inti = 0;<br />do {<br />    println("Counting... “ + i);<br />    i = i + 1;<br />} while (i <= 10);<br />
  68. 68. Exercício<br />Implementeum programaque calculeumasequência de Fibonacci, segundo a seguinterelaçãorecorrente:<br />F(n) = F(n-1) + F(n-2), com F(0) = 0 e F(1) = 1<br />e.g.: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...<br />4.1. Imprimaosprimeiros 100 números da sequência<br />4.2. Imprimatodososnúmeros da sequênciainferiores a 10000<br />
  69. 69. Solução<br />intnumFibonacciNumbers = 100;<br />long valN = 0;<br />long valN_1 = 1;<br />for (int n = 0; n < numFibonacciNumbers; n++) {<br />    println(n + “ -> “ + valN));<br />    valN = valN + valN_1;<br />    valN_1 = valN - valN_1;<br />}<br />
  70. 70. Arrays<br />Um array é um contentor de valores do mesmotipoarmazenadanumaregiãocontígua da memória RAM<br />Um vector tem um nome e váriasposiçõesquepodemseracedidasatravés de um índice (entre parêntesis rectos [ ] ) :<br />O índice tem de ser um valor inteiro<br />    idade[0] = 23;<br />   idade[1] = 47;<br />   idade[2] = 11;<br />   idade[3] = 92;<br />   idade[4] = 76;<br />   intage = idade[3]; //age = 92<br />
  71. 71. Arrays - Declaração e Inicialização<br />Tal comoqualqueroutravariável, énecessárioindicarqual o tipo de valoresque o array iráguardar. <br />Énecessáriotambémdefinirqual o tamanho do array, antes de o utilizar.<br /><tipo> meuArray[];<br />meuArray = new <tipo>[tamanho];<br />intidades[];<br />idades = new int[5];<br />
  72. 72. Arrays - Declaração e Inicialização<br /><ul><li>Declarar e inicializarnumsópasso</li></ul> intidade[] = {23, 47, 11, 92, 76};<br />
  73. 73. Arrays - índices<br />Indiceéumaexpressão do tipointeiro<br />Literal<br />idade[1]<br />Variável<br />idade[i]<br />Expressãocomplexa<br />idade[2*i+n]<br />Podeserusadoparapercorrer um array<br />através de um ciclo for, while, ...<br />
  74. 74. Arrays - índices<br />Percorreros dados de um array<br />Para leitura<br />Para escrita<br />O índicenãodeveultrapassar o tamanho do array!<br />int age = idade[5] // ERROR!!    <br />intarraySize = 5;<br />//escreve dados no array<br />for (inti=0; i < arraySize; i++)<br />{<br />    //apenas um exemplo...    <br />    idade[i] = (i+1)*(i+1); <br />}<br />//imprimeidadesinferiores a 20<br />for(inti=0; i < arraySize; i++)<br />{<br />    if (idade[i] < 20)<br />        println(idade[i]);<br />}<br />
  75. 75. Exemplo 6<br />intcenterX = 200;<br />intcenterY = 300;<br />boolean v1 = true;<br />boolean v2 = true;<br />int n = 10; // o numero de circulos<br />color colors[] = new color[n];<br />for (inti = 0; i < n; i++) {<br /> colors[i] = color(random(255), random(255), random(255));<br />}<br />size(400, 600);<br />background(255);<br />stroke(0);<br />strokeWeight(3);<br />line(centerX-100, centerY-150, centerX+100, centerY+150);<br />line(centerX-100, centerY+150, centerX+100, centerY-150);<br />strokeWeight(2);<br />stroke(0);<br />noFill();<br />if (v2) {<br /> // curva superior<br /> curve(centerX-100-100, centerY-150-150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150-150);<br /> // curva inferior<br /> curve(centerX-100-100, centerY+150+150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150+150);<br />}<br />if (v1) {<br /> // curva superior<br /> curve(centerX-100-100, centerY-150+150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150+150);<br /> // curva inferior<br /> curve(centerX-100-100, centerY+150-150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150-150);<br />}<br />if (v1 && v2) {<br />strokeWeight(1);<br /> for (inti = 0; i < n; i++) {<br /> fill(colors[i]);<br /> ellipse(centerX, centerY-150-20-100+i*100/n, 40, 40);<br />}<br />}<br />
  76. 76. Funções<br />Uma função* éumaporção de códigoqueefectuaumatarefaespecífica. <br />A divisão de um programaemváriasfunçõespermitecriarprogramasmaisestruturados, fáceis de manter e permitetambém a reutilização de código<br />Na sua forma mais simples, umafunçãoé um bloco de código com um nomequepodemosusaremqualquer parte do programapara "chamar" e executaressebloco de código<br />* Existemmuitasdesignaçõespara o conceito de função: procedimento, rotina, subrotina, método, subprograma. Todoselessignificam a mesmacoisa, mas sãousadosemdiferentescontextos.<br />
  77. 77. Funções<br />void draw() <br />{<br />    println("Executa o programa");<br />    fazTarefaEspecifica1(); //chamada a umafunção!<br />    fazTarefaEspecifica2(); //chamada a outrafunção!<br />    fazTarefaEspecifica1(); //chamaoutravez a função 1!<br />}<br />void fazTarefaEspecifica1() {<br />    println("Estafunçãoexecutaumasérie de operaçõesparacompletar a tarefa 1");<br />}<br />void fazTarefaEspecifica2() {<br />    println("Estafunçãoexecutaumasérie de operaçõesparacompletar a tarefa 2");<br />}<br />
  78. 78. Funções<br />Sintaxeparadefinir a função<br /> void nomeFunção() <br /> {      //código da função... }<br />void é um tipo especial quesignifica "vazio", "semtipo" e nestecasoindicaque a funçãonãoretornaqualquer valor (verpróximos slides)<br />Para invocar (i.e., executar o códigodentro da função)<br />     <br />nomeFunção();<br />
  79. 79. Funções com Parâmetros<br />Funções com parâmetros<br />Podemoperarsobre dados diferentes de cadavezqueexecutam.<br />Nestecaso, o códigoquechama a funçãodevepassarosvaloressobreosquais a funçãoiráexecutar<br />Para issotemos de parametrizar a função (i.e., definirque dados o programa principal deveenviarpara a função)<br />Usode funções com parâmetros (de entrada)<br />Sintaxeparadefinir  funções com parâmetros<br />void nomeFunção(<tipo> nomeParam1, <tipo> nomeParam2, [...]) <br />{<br />        //código da função...<br />}<br />Para invocar (i.e., executar o códigodentro da função)<br />nomeFunção(valorParam1, valorParam2);<br />
  80. 80. Funções com Parâmetros<br />void draw() <br />{<br />    soma(1, 2); // escreve "3"<br />    soma(3, 5); // escreve "8"<br />}<br />void soma(int num1, int num2) <br />{<br />    intresultado;<br />    resultado = num1 + num2;<br />    println(resultado);<br />}<br />
  81. 81. Funções com valor de retorno<br />Funções com valor de retorno<br />int soma(int num1, int num2)<br />Emfunçõescomo a anterior, fazmaissentidoque a funçãodevolva o valor calculadoaocódigoquechamou a função (emvez de o imprimir, comoemexemplosanteriores...)<br />Para tal a funçãodeveindicarqueretorna um valor e qual o seutipo (nesteexemplo um int)<br />Na implementação da funçãoéobrigatóriofinalizar com um comando return<br />
  82. 82. Funções com valor de retorno<br />void draw()<br />    int num1;<br />    int num2;<br />    int r;<br />    num1 = 1;<br />    num2 = 2;<br />    r = soma(num1, num2); <br />    println(r);<br />}<br />int soma(int num1, int num2) {<br />    intresultado;<br />    resultado = num1 + num2;<br />    return resultado;<br /> }<br />
  83. 83. Funções com valor de retorno<br />Sintaxeparadefinir  funções com valor de retorno<br /><tipo> nomeFunção(<tipo> nomeParam1, <tipo> nomeParam2, [...]) <br />{<br />    //código da função...<br />    return valorDeRetorno;<br />}<br />Para invocar (i.e., executar o códigodentro da função)<br />variavel = nomeFunção(valorParam1, valorParam2);<br />Nãoénecessárioatribuir o resultado a umavariável, podeserusadodirectamentenumaexpressãoouusadocomoparâmetroparaoutrafunção<br />
  84. 84. Exemplo 7<br />void setup() {<br /> size(400, 600);<br />}<br />void draw() {<br /> background(255);<br />duploCone(0, 0, 100, 100);<br />duploCone(100, 100, 200, 200);<br />duploCone(200, 200, 300, 300);<br />duploCone(300, 300, 400, 400);<br />}<br />void duploCone(int x1, int y1, int x2, int y2) {<br /> stroke(0);<br />strokeWeight(3);<br /> line(x1, y1, x2, y2);<br /> line(x1, y2, x2, y1);<br />strokeWeight(2);<br /> stroke(0);<br />noFill();<br /> // curvassuperiores<br /> curve(x1-100, y1-100,x1, y1, x2, y1, x2+100,y1-100);<br /> curve(x1-100, y1+100,x1, y1, x2, y1, x2+100,y1+100);<br /> // curvasinferiores<br /> curve(x1-100, y2-100,x1, y2, x2, y2, x2+100,y2-100);<br /> curve(x1-100, y2+100,x1, y2, x2, y2, x2+100,y2+100);<br />}<br />
  85. 85. Visibilidade das variáveis<br />As variáveispodemserdeclaradasemváriossítios do programa<br />fora de qualquerfunção (variável global)<br />dentro de umafunção (variável local àfunção)<br />dentro de outros blocos de código: { } (ifs, ciclos, etc)<br />O sítioondesãodeclaradasdeterminaondepodemserlidas/escritas<br />Uma variável global podeserusadaemqualquer parte do programa<br />Uma variável local apenaspodeserusada no bloco (funçãooubloco de código) ondefoideclarada, incluindoblocosinternos a essebloco<br />
  86. 86. Visibilidade das variáveis<br />Se tentarmosusarumavariável local fora do blocoondefoideclarada, o compiladorassinala um erro<br />No entanto, énecessárioalgumcuidadoquando as variáveisglobais e locaistêm o mesmonome<br />Nessasituaçãoéusada a variável com menorvisibilidade (a quefoideclaradadentro do bloco superior hierarquicamentemaispróximo)<br />
  87. 87. Processing – animação<br />Exemplo9<br />int x;<br />void setup() {<br /> size(400, 400);<br />frameRate(10);<br /> x = 0;<br />}<br />void draw() {<br /> background(0);<br /> fill(244);<br />rect(x, 10, 40, 40);<br /> x = x + 1;<br />}<br />
  88. 88. Programação Orientada a Objectos<br />
  89. 89. Objectos no mundo real<br />Objectos no mundo real podemserdescritosatravés de duascaracterísticasessenciais: atributose comportamento.<br /> <br />Porexemplo, o cão do João tem:<br /> <br /><ul><li> atributos:
  90. 90. Cor:  castanho
  91. 91. Tamanhopêlo: curto
  92. 92. Raça: Rafeiro
  93. 93. Idade: 3 anos
  94. 94. Nome: Bobi
  95. 95. comportamento
  96. 96. corre
  97. 97. ladra
  98. 98. senta-se
  99. 99. come
  100. 100. dorme</li></li></ul><li>Objectos no mundo real<br />Outro exemplo: o automóvel do Jorge <br /><ul><li>Atributos:
  101. 101. Cor: azul escuro
  102. 102. Marca: Opel
  103. 103. Modelo: Corsa
  104. 104. Velocidade: parado
  105. 105. Combustível: 30%
  106. 106. Comportamento:
  107. 107. arrancar
  108. 108. acelerar
  109. 109. travar</li></ul>(O comportamento não se refere necessariamente a comportamento autónomo, mas simplesmente a acções que o objecto pode realizar.)<br />
  110. 110. Classes no mundo real<br />Os dois exemplos anteriores, cão e automóvel, referiam-se a objectos concretos (o cão do João e o automóvel do Jorge).<br />No entanto, existem milhares de automóveis diferentes, com o mesmo comportamento e com os mesmos atributos (cor, marca, modelo, etc - embora não com os mesmos valores)<br />A este conjunto genérico de comportamentos e atributos dá-se o nome de classe.<br />
  111. 111. Classes em OOP<br /><ul><li>Uma classe é, basicamente, um molde para a criação de objectos. 
  112. 112. Os atributos são representados através de variáveis e o comportamento através de métodos.
  113. 113. Em OOP, ao processo de criar um objecto a partir de uma classe dá-se o nome de instanciação.
  114. 114. Usando o exemplo anterior, o objecto "Automóvel do Jorge" seria uma instância da classe "Automóvel".</li></ul>http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-winter<br />
  115. 115. Classes em OOP<br /><ul><li>A classepassa a sermais um tipo de dados
  116. 116. As nossasvariáveispodemserdeclaradascomosendo de um tipoigualaonome da classe
  117. 117. Essasvariáveiscontêm“objectos”ou null
  118. 118. Para acedermosàsvariáveisoumétodos do objectousamos a notaçãoponto (.):</li></ul>MinhaClasse v, v1;<br />v = new MinhaClasse();<br />v1 = null;<br />v.nomePropriedade;<br />v.nomeMetodo();<br />v1.nomePropriedade; // erro<br />
  119. 119. Um exemplo concreto: Classe Polígono<br />Atributos:<br />- ?<br />Fase de desenho<br /><ul><li>Criar uma classe
  120. 120. Poligono
  121. 121. Que propriedades são necessárias/vou precisar para a classe?
  122. 122. Que acções deve ela implementar?</li></ul>Comportamento:<br />- ?<br />
  123. 123. Um exemplo concreto: Classe Polígono<br />Atributos:<br /><ul><li>Pontos
  124. 124. Cor interior
  125. 125. Cor linha exterior
  126. 126. Perímetro
  127. 127. Área
  128. 128. Bounding box</li></ul>Fase de desenho<br /><ul><li>Criar uma classe
  129. 129. Poligono
  130. 130. Que propriedades são necessárias/vou precisar para a classe?
  131. 131. Que acções deve ela implementar?</li></ul>Comportamento:<br /><ul><li>desenhar-se
  132. 132. Rodar
  133. 133. Escalar
  134. 134. transladar</li></li></ul><li>Implementaçãoinicial: Exemplo 10<br />class Poligono {<br />int x[] = {10, 50, 25};<br />int y[] = {10, 10, 25};<br /> public void desenha() {<br />beginShape();<br /> for (inti = 0; i < x.length; i++) {<br /> vertex(x[i], y[i]);<br /> }<br />endShape(CLOSE);<br /> }<br />}<br />
  135. 135. Alguma sintaxe<br />class NomeClasse {<br />//declaração de variáveis (propriedades)<br /> //implementação de métodos<br /> // metodosprivadosapenaspodemserinvocadosporcodigodentro<br /> // da propriaclasse<br /> private void metodoPrivado() {<br /> }<br /> //metodospúblicospodemserinvocadosporcodigo exterior àclasse<br /> public void metodoPublico() {<br /> }<br />}<br />
  136. 136. Alguma sintaxe: instanciação<br />NomeClassenomeVariavel;<br />nomeVariavel = new NomeClasse();<br />
  137. 137. Encapsulamento<br /><ul><li>Uma das vantagens da programação orientada a objectos é a de permitir o encapsulamento dos dados/comportamento:
  138. 138.  Por um lado, permite agrupar numa unidade lógica dados associados a um determinado conceito e operações sobre esses dados.
  139. 139.  Por outro lado, permite "esconder" informação do exterior, prevenindo erros e estados inconsistentes. 
  140. 140. (Dentro do possível as classes devem ser implementadas de forma a não ser possível que código externo à classe altere dados, colocando o objecto num estado de erro)</li></li></ul><li>Encapsulamento<br /><ul><li>Estas duas propriedades facilitam o trabalho do programador que utiliza os objectos: tal como no caso das funções, não é necessário compreender o funcionamento interno do objecto para tirar partido dele.
  141. 141. A estruturação de um programa em classes/objectos permite também ao programador definir e restringir as interdependências entre código, tornando-o mais robusto e compreensível. 
  142. 142. (Sem objectos teríamos programas em que o estado e comportamento de diferentes componentes estariam todos misturados).</li></li></ul><li>Encapsulamento em Java <br /><ul><li>A linguagem Java não força o encapsulamento na perspectiva do "esconder" a informação do exterior
  143. 143. O programador escolhe:
  144. 144. Os atributos podem ser declarados como vísiveis do exterior (access modifier)
  145. 145.  keyword public 
  146. 146. Ou podem ser declarados como visíveis apenas pela classe
  147. 147. keyword private</li></li></ul><li>Encapsulamento: exemplo <br /><ul><li>Acrescentarpontosaopolígono
  148. 148. Tal comoestá a nossaclassepoderiamosfazer:</li></ul> p = new Poligono();<br />p.x = expand(p.x, p.x.length+1);<br />p.x[p.x.length-1] = 25;<br />p.y = expand(p.y, p.y.length+1);<br />p.y[p.y.length-1] = 15;<br />Exemplo_11<br />
  149. 149. Encapsulamento: exemplo <br /><ul><li>Se me enganar, o código da classepodedeixar de funcionar:</li></ul> p = new Poligono();<br />p.x = expand(p.x, p.x.length+1);<br />p.x[p.x.length-1] = 25;<br />p.y = expand(p.y, p.y.length);<br />p.y[p.y.length] = 15;<br />Exemplo_12<br />Acederdirectamenteàspropriedadesquebra o encapsulamento da classe. O objectodeixa de tercontrolosobre as suasprópriaspropriedades.<br />Para além disso, énecessárioconhecer o funcionamentointerno da classe (nome e tipo das variáveis)<br />
  150. 150. Encapsulamento: exemplo <br /><ul><li>Para manter o encapsulamento:</li></ul>class Poligono {<br /> private int x[] = { 10, 50, 25 };<br /> private int y[] = { 10, 10, 25 };<br /> public void desenha() {<br />…<br /> }<br /> public void addPoint(int x, int y) {<br />p.x = expand(p.x, p.x.length+1);<br />p.x[p.x.length-1] = x;<br />p.y = expand(p.y, p.y.length+1);<br />p.y[p.y.length-1] = y;<br /> }<br />}<br /><ul><li>Exemplo_13</li></li></ul><li>Construtores<br /><ul><li>Muitas vezes, a inicialização do objecto é complexa  e apenas faz sentido ser realizada pelo próprio objecto que está a ser criado (em vez de ser feita pelo código externo à classe que está a criar o objecto).
  151. 151. Por isso, quando um objecto é criado, é invocado um método especial chamado construtor. </li></li></ul><li>Construtores em Java <br /><ul><li>Em Java, o construtoré um método com o mesmonome da classe, mas semtipo de retorno.
  152. 152.  
  153. 153. É o nome do construtor (e parâmetros) quecolocamos a seguirà keyword 'new' quandocriamos um objecto.
  154. 154. Exemplo_14</li></li></ul><li>Construtores em Java <br /><ul><li> Uma classepodedefinirváriosconstrutores com parâmetrosdiferentes (número e/outipo).
  155. 155. Normalmente, define-se um construtorgeralqueaceitatodososparâmetrospossíveis e outros mais simples, queusamalgunsvaloresporomissão.</li></ul>Para poupartrabalho, define-se primeiro o construtorgeral<br />Os outros podeminvocar o geral com valorespré-definidos<br /><ul><li>Exemplo_15</li></li></ul><li>Destrutores<br /><ul><li>Um destrutor é o oposto de um construtor: é um método especial invocado quando o objecto é destruído. 
  156. 156. O destrutor é usado para dar oportunidade ao objecto de libertar recursos (por exemplo memória).
  157. 157. Em Java não existem destrutores porque a gestão de memória é feita automaticamente pelo garbage collector.
  158. 158. Existe um método que é invocado antes de o objecto ser recolhido pelo garbage colector mas raramente se usa.</li></li></ul><li>Herança<br /><ul><li>Em muitos casos existe uma relação entre classes diferentes num programa. 
  159. 159. Voltando aos veículos, o nosso programa poderia necessitar de trabalhar com bicicletas e automóveis.
  160. 160. Apesar de ambos serem veículos, uma parte do estado e alguns comportamentos são completamente diferentes.</li></li></ul><li>Herança<br /><ul><li>Nestes casos, faz mais sentido modelar três classes: Automóvel e Bicicleta como classes derivadas da classe Veículo. 
  161. 161. Desta forma, evita-se repetir o estado e comportamento partilhados.
  162. 162. Nesta situação, as classes Automóvel e Bicicleta, herdam o estado e comportamento de Veículo, podendo estendê-los.
  163. 163. A classe Veículo é a superclasse e as classes Automóvel e Bicicleta as subclasses.</li></li></ul><li>Herança<br /><ul><li>As subclasses herdam todos os atributos e métodos da superclasse, excepto os construtores.
  164. 164. O construtor da subclasse deve invocar o construtor da superclasse 
  165. 165. (se a superclasse tiver um construtor vazio - sem parâmetros, este é invocado automaticamente).
  166. 166. Para invocarmos o construtor da classe mãe usa-se a instrução 
  167. 167. super()
  168. 168. super(param1, param2, etc);</li></li></ul><li>Herança em Java<br />Exemplo_16<br />
  169. 169. Method Overriding<br /><ul><li>Method overriding ("sobreposição de método") é uma funcionalidade das linguagens OOP que permite a uma subclasse definir uma implementação mais específica de um método da superclasse.
  170. 170. Por exemplo, a classe Veículo define um método buzinar() com uma implementação genérica para todos os tipos de veículo ("horn"). No entanto, faz mais sentido a uma Bicicleta proporcionar uma implementação mais específica deste método ("ring ring"). </li></li></ul><li>Method overriding<br />Method overriding permite à classe Bicicleta re-implementar um método da classe Veículo.<br />A classe Automóvel, como não re-implementa o método buzinar(), usa a implementação de Veículo ("horn").<br />
  171. 171. Method overriding em Java<br />No casodaclasseRectangulo, épossívelcalcularoperímetro de forma maisrápida do que a implementação do Polígono…<br />Exemplo_17<br />
  172. 172. Relação is-a (é um)<br />A herança permite definir relações do tipo “é um” entre classes:<br /> Um Rectangulo é um Poligono<br /> Um PoligonoRegular é um Poligono<br />Isto significa que tanto um Rectangulo como um PoligonoRegular podem ser tratados no código como se fossem do tipo Poligono<br />
  173. 173. Relação is-a (é um)<br />Exemplo_18<br />Nesteexemploinvocamos “desenha()” emtodososobjectoscomo se fossemtodosPoligono. Nestecasotodas as classes herdam a mesmaimplementação de “desenha()” daclassemãe.<br />O queaconteceria se invocassemos “perimetro()” damesma forma?<br /> “perimetro()” tem umaimplementaçãodiferenteemRectangulo<br />Exemplo_19<br />
  174. 174. Polimorfismo<br />Dois tipos de polimorfismo:<br />Overloading: possibilidade de definir métodos com o mesmo nome para número ou tipo de parâmetros diferentes. É invocado o método que tem os parâmetros em número e tipo de acordo com a invocação.<br />Overriding: possibilidade de definir implementações mais concretas de um método numa subclasse. Por omissão, é a implementação mais concreta que é invocada.<br />
  175. 175. ProgramaçãoemProcessing<br />Fim<br />http://slideshare.net/jorgecardoso (tag: ea-phd-ia-2011)<br />

×