IntroduçãoàProgramaçãoem ProcessingPrograma de DoutoramentoemCiência e Tecnologiadas Artes – Arte InteractivaJorge C. S. Cardosohttp://jorgecardoso.eu19 Fevereiro 2011
TópicosConceitos de programação de computadoresHardware, evolução das linguagens de programação, códigofontevscódigomáquina, máquina virtual Estruturasbásicas de programaçãoem ProcessingVariáveis, condições, ciclos, funçõesProgramaçãoorientada a objectos (OOP)Classes, objectos, herança, construtores, destrutores, encapsulamento, herança, method overriding
HardwareProcessadorCPU (Central Processing Unit)Éa parte de um sistema de computadorqueexecuta as instruções de um programa de computador
HardwareMemória RAM (Random Access Memory)Volátil (precisa de alimentaçãoeléctricaparapreservaros dados)O CPU lêe escrevedirectamenteparaestamemóriaO programaque o CPU executaestáescritonamemória RAM
HardwareMemóriapersistenteNãovolátil (mantémos dados mesmosemalimentaçãoeléctrica)ExemplosDisco duroMemória Flash (cartões SD, Flash pen, …)OsprogramassãoarmazenadosnestamemóriaQuandoosexecutamospassampara a RAM
Linguagens de ProgramaçãoProgramaSequência de instruçõesque o CPU executaAs instruçõesestãona RAMExemploSomar 3 + 5 e multiplicar o resultadopor2Como éque o CPU fazisto? 
CPUPossui memória interna Muito pouco espaçoAs unidades de memória interna do processador chamam-se registos Conhece uma lista de instruçõesPercorre a memória RAM e lê e executa instrução a instrução
Evolução das linguagensOsprimeiros “programadores” de computadorescreviamprogramasemnúmerosUsavamdirectamente a tabela de instruções do processadormuitosujeito a erros...muitotrabalhoso...Criou-se umalinguagemmaisfácil de decorar e utilizar, baseadaemmnemónicasAssembly Language .model small.stack.datamessage db "Hello world, I'm learning Assembly !!!", "$".codemain procmovax,seg messagemovds,axmov ah,09lea dx,messageint 21hmov ax,4c00hint 21hmain endpend main
Evolução das linguagensAs linguagens de programação foram evoluindo para sintaxes mais próximas da linguagem natural
Linguagens de alto-nívelsource: http://chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf
CódigofonteTexto que o programador escreve numa determinada linguagem de programação (e.g., ObjC, Java, ...)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. */}
CódigoMáquina.codemain procmovax,seg messagemovds,axmov ah,09lea dx,messageint 21hmov ax,4c00hint 21hmain endpend mainInstruçõesexecutadasdirectamentepeloprocessador
O códigomáquinaresulta de um processo de tradução do códigofontenumalinguagementendidadirectamentepeloprocessador (sequência de números)Linguagens de Programação:  Criação de um executávelCompilador
Convertecódigofonteemcódigomáquina (específicoparacada CPU - e.g. Intel Atom, Apple A4)
Códigomáquinageradopelocompiladortambémconhecidocomo "códigoobjecto"
Linker
Combinaosdiferentesmódulos de códigomáquina (i.e. previamentecompilados) e gera o ficheiro final queiráserexecutadopela CPU
Permite o uso de bibliotecasdisponibilizadasporterceirosLinguagens de Programação:  Criação de executávelem JavaCompilador
A linguagem Java é compilada em código máquina para um processador virtual (máquina virtual)
O código máquina resultante é chamado "bytecode“
Em Java não existe necessidade de "linkagem"
Uma aplicação Java consiste num conjunto destes ficheiros (e não apenas um)
A máquina virtual trata de carregar para a memória os ficheiros necessários à medida que o programa executaLinguagens de Programação:Máquina Virtual JavaA máquina virtual Java é um processador que não existe fisicamente (apenas existe a sua especificação)
Este processador virtual é implementado através de software em qualquer computador
Para correr um programa Java temos de ter instalado este processador virtual (Java Virtual Machine - JVM)
A vantagem é que o nosso programa corre em qualquer plataforma que tenha uma JVM instalada (só temos de compilar uma vez)Linguagens de ProgramaçãoO programapodeserdescritousandováriostipos de linguagens:“Natural”"tell Finder to open myDocument.doc”DiagramaProgramação (e.g., Java, C, Obj-C, C++)void draw() {background(0);/* actualizar posição */x = x + dirX;if ( x < minX || x > maxX ) {     dirX = -dirX;    x = x + dirX;    lX = x;}
Linguagens de ProgramaçãoNa descrição de um programaéessencialdefinir:Ponto de entrada. Qual a primeirainstrução a executar?Sequência: comoavanço de instruçãoeminstrução?
Linguagens de ProgramaçãoJava
Permite a criação de programasquepodemserexecutadosemváriasplataformassemmodificação
A suautilizaçãotornou-se maisconhecidaatravés das applets
pequenosprogramasquepodemserexecutadosnum browser.
Osprogramasescritosem Java sãocompiladosnumcódigomáquina virtual queédepois (aquando da execução do programa) transformadoemcódigomáquinarealLinguagens de ProgramaçãoProcessing“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
Processing“Free to download and open sourceInteractive programs using 2D, 3D or PDF outputOpenGL integration for accelerated 3DFor GNU/Linux, Mac OS X, and WindowsProjects run online or as double-clickable applicationsOver 100 libraries extend the software into sound, video, computer vision, and more...Well documented, with many books available” – http://processing.org
Processing ExamplesAnimation Nokia Friends (http://postspectacular.com/process/20080810_nokiafriends)ImaViz – Sound Visualizer (http://www.openprocessing.org/visuals/?visualID=9923hh)“Music”Ball droppings (http://balldroppings.com/js/)PSO VideoCatalina music video (http://moullinex.tumblr.com/post/3180520798/catalina-music-video)Papa Roach – Getting away with murder (http://processing.org/exhibition/works/papa/index.html)3DHair Ball (http://www.openprocessing.org/visuals/?visualID=12399)(Generative) DesignMarius Watz (http://www.unlekker.net)http://artes.ucp.pt/blogs/index.php/PMultimedia/2009/10/03/capas-de-livrosGames Pong Multiplayer (http://artes.ucp.pt/ftp/a0306005/index.html)InstalationsMy little piece of privacy (http://www.niklasroy.com/project/88/my-little-piece-of-privacy/)
ProcessingIDE (Integrated Development Environment)
19-02-2011Jorge Cardoso22Processing - eixos da janela gráfica
ProcessingAlgumasinstruçõessizebackgroundline, rect, ellipse, curvefill, strokenoFill, noStroke
Exemplo 1size(400, 600);background(255);stroke(0);strokeWeight(3);line(100, 150, 300, 450);line(100, 450, 300, 150);// curva superiorstrokeWeight(2);stroke(0);noFill();curve(0, 0, 100, 150, 300, 150, 400, 0);// pontos de controlo//fill(255, 0, 0);//noStroke();//ellipse(0, 0, 5, 5);//ellipse(400, 0, 5, 5);//curva inferiorstroke(0);noFill();curve(0, 600, 100, 450, 300, 450, 400, 600);
Introduçãoàprogramação ComentáriosVariáveisCondiçõesCiclosFunções
Aviso!http://xkcd.com/859/
IntroduçãoàProgramaçãoComentáriosServempara o programador se ajudar a simesmo a lembrarporqueéque fez as coisas de determinada formaSão ignoradaspelocompilador// Comentáriode umalinha/* Comentário   de váriaslinhas */intaddTwoNumbers( int num1, int num2 ){    //a comment: add the two numbers    int result = num1 + num2;    /* Some other comment    just to show how to do it    for multiple lines. */    return result;}
VariáveisVariáveissãouma forma de armazenarvaloresdurante a execução de um programaUma variávelé um nomequeutilizamosparanosreferirmos a um valorPodemosalterar o valor durante o programaSempreque o nomeéutilizado no programaéautomaticamentesubstituídopelo valor correspondenteintsomeNumber;intanotherNumber;int result;someNumber = 3;anotherNumber = 2;//result stores the value 3 * 2 = 6result = someNumber * anotherNumber;
VariáveisAntes de podermosusarumavariáveltemos de a declarar. A declaraçãoindica o tipo de dados que a variávelvaiguardar.Inteiros (int, long) Decimais(float, double)Lógicos (boolean)Caracteres (char)Sintaxe:<tipo> nomeDaVariavel;<tipo> nomeDaVariavel = <valorinicial>;intmyNumber;long anotherNumber = 13;float aFloatNumber = 0.24;double aDoublePrecisionNumber = 1.23e2;booleanisActive = true;char aLetter = 'P';
VariáveisPara guardarmos um valor numavariáveltemos de atribuí-lo àvariável.minhaVariavel = <valor>;Aquiloqueatribuimos a umavariávelé o resultado de umaexpressão. Uma expressãopodeser:Literal : Um valor escritodirectamente no códigoidade= 33; // 33 é um literalVariável: O valor de umavariávelidade= idadeJoao; // idadeJoaoéoutravariávelFunção: O valor devolvidoporumafunçãodefinidapreviamenteidade= random(10); // random éumafunção Expressõesanterioresligadas com operadoresaritméticos : Definiçãorecursiva! idade= idadeJoao + 10 * 3;
VariáveisAlgumasrestrições no uso de nomesemvariáveis:Nomes das variáveistêmcomeçarcom umaletra do alfabeto (dígitosnãosãopermitidos) oupor um underscore (_)Nomes de variáveispodemconterletras e dígitos, mas espaçosou outros caracteresespeciaisnãosãopermitidos.Osnomes de variáveissão case sensitive (e.g. myNumberédiferente de mynumber)Palavrasreservadas do Java nãopodemserusadascomonomes de variáveis (e.g. int, float, for, while, do, break, ...)Osnomes das variáveisdevemserescolhidos de forma a tornar o seusignificado o maisclaro e legívelpossível.
Exemplo 2intcenterX = 100;intcenterY = 100;size(400, 600);background(255);stroke(0);strokeWeight(3);line(centerX-100, centerY-150, centerX+100, centerY+150);line(centerX-100, centerY+150, centerX+100, centerY-150);// curva superiorstrokeWeight(2);stroke(0);noFill();curve(centerX-200, centerY-300, centerX-100, centerY-150, centerX+100, centerY-150, centerX+200, centerY-300);//curva inferiorstroke(0);noFill();curve(centerX-200, centerY+300, centerX-100, centerY+150, centerX+100, centerY+150, centerX+200, centerY+300);
OperadoresOperadoresaritméticos+ (adição)- (subtracção)* (multiplicação)/ (divisão, inteiraoufraccionária)% (resto da divisãointeira - modulo)Osoperadoresnumaexpressãosãoaplicados da esquerdapara a direita, mas os operadores *, / e % têmprecedênciasobre + e -Se quisermosalterar a precedência, temos de usarparêntesis:  (  )1+2*3 = 1+6 = 7(1+2)*3 = 3*3 = 9
Exercício 1Crie um programaem Java que:armazeneemduasvariáveisosvalores 5 e 2realize a divisão entre as variáveis (i.e. 5 / 2)guarde o resultadonumavariávelimprima o resultado da operaçãoDecisões a tomar:Quetipo de variáveisdefinir?int, float, double, ...??Quetipo a usarpara o resultado da divisão?int, float, double, ...??Existemdiferenças no resultado?divisãointeira VS divisãovírgulaflutuante...
SoluçãointaNumber = 5;intanotherNumber = 2;float aFloat = 2.0f;float result;result = aNumber / anotherNumber;println(result);
CondiçõesEmquasetodososprogramasénecessárioexecutaralgumasacçõesapenas se umadeterminadacondição for verdadeira...CondiçõesifNa sua forma mais simples a estruturaif resume-se a executar um conjunto de acções se determinadacondição for verdadeira. 
As chavetas{ }delimitam as acçõesexecutadascondicionalmente. if ([condição]) {     [acções] }
CondiçõesifA condiçãoéumaexpressão do tipoboolean Literal true ou false Variável (boolean) com o valor true ou false Expressão com operadorescondicionaisbooleanisActive = true;if(isActive) //eqv. a if (isActive == true){    //do something...    isActive = false;}
Exemplo 3intcenterX = 200;intcenterY = 300;boolean v1 = false;size(400, 600);background(255);stroke(0);strokeWeight(3);line(centerX-100, centerY-150, centerX+100, centerY+150);line(centerX-100, centerY+150, centerX+100, centerY-150);strokeWeight(2);stroke(0);noFill();if (v1) {  // curva superior  curve(centerX-100-100, centerY-150-150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150-150);  // curva inferior  curve(centerX-100-100, centerY+150+150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150+150);} else {  // curva superior  curve(centerX-100-100, centerY-150+150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150+150);  // curva inferior  curve(centerX-100-100, centerY+150-150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150-150);}
Condições ifAs condiçõesusadasnos testes podemusarosoperadorescondicionais: igual a: == (atenção!) maior do que: > menor do que: < maiorouigual a: >= menorouigual a: <= diferente: != O resultado de umaoperaçãocondicionalé um valor true ou falseintaNumber = 10;intanotherNumber = 6;boolean correct = false; if(9 == aNumber)    correct = true;if (anotherNumber > aNumber)    aNumber = anotherNumber;    
Condições ifAlgumasvariantes da estrutura if:If... Else... If... Else if... If... Else if... Else...Switch
Condições if... else...O iftambémnospermiteexecutaracções se a condição for falsaif (<condição>) {<acções A> //executado se a condição for true...} else {    <acções B> //executado se a condição for false...}
Condições if... else ifÉpossívelcombinar ifs sequencialmenteif (<condição A>) {    <acções A>} else if (<condição B>){     <acções B>} else {     <acções C>}
OperadoresLógicosÉpossíveltestarcondiçõescomplexasatravés dos operadoreslógicos: operadoresquecombinamcomparações simples:AND : As duascomparaçõestêm de serverdadeirasaomesmo tempoOR : Pelomenosuma das comparações tem de serverdadeiroNOT : Inverte (i.e. nega) o valor da comparação
OperadoresLógicosAND : &&OR : ||NOT : !if (x > 10 && x < 20) {println(“Entre 10 e 20”);}if (x < 10 || x > 20) {println(“Fora do intervalo [10; 20]”);}if (!(x < 10)) {println(“X não é menor do que 10”);}
Exemplo 4intcenterX = 200;intcenterY = 300;boolean v1 = true;boolean v2 = true;size(400, 600);background(255);stroke(0);strokeWeight(3);line(centerX-100, centerY-150, centerX+100, centerY+150);line(centerX-100, centerY+150, centerX+100, centerY-150);strokeWeight(2);stroke(0);noFill();if (v2) {  // curva superior  curve(centerX-100-100, centerY-150-150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150-150);  // curva inferior  curve(centerX-100-100, centerY+150+150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150+150);}if (v1) {  // curva superior  curve(centerX-100-100, centerY-150+150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150+150);  // curva inferior  curve(centerX-100-100, centerY+150-150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150-150);}if (v1 && v2) {strokeWeight(1);  fill(150);  ellipse(centerX, centerY-150-20, 40, 40);}
Exercício 2Implementeum programaque:Defina 3 variáveisparaarmazenartrêsinteirosàescolha (num1, num2 e num3)Teste se num1 éigual, maioroumenorque num2, e imprimaumamensagem do tipo "7 émaior do que 3".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".Divida num1 por num2, imprimindo o resultado, tendo o cuidado de verificar se num2 édiferente de zero!Divisõespor zero em Java provocamo "crash" da aplicação!
Exercício 2int num1 = 5;int num2 = 12;int num3 = 7;if(num1 == num2) {    println(num1 + “ is equal to ” + num2);} else if(num1 > num2){    println(num1 + “ is bigger than “ + num2);} else {    println(num1 + “ is smaller than ” + num2);     if (num3 > num1 && num3 < num2) {    println(num3 + “ is between “ + num1 + “ and “ + num2);    }}if(num2 != 0){    println("A divisão de ” + num1 + “ por “ + num2 + “ é “ + ((float)num1/num2));}
CiclosOsciclospermitem-nosexecutar um conjunto de instruçõesrepetidamenteExistemduas classes de ciclos:Ciclosqueexecutam um númeropré-determinado de vezes: forCiclosqueexecutamenquantoumacondiçãoéverdadeira: do e while
CicloforExecutado um númeropré-determinado de vezesfor (<inicialização>; <condição>; <incremento>) {    <acções>}Variável de cicloinicia-se em zero (e declara-se dentro do própriociclo)Condição simples com o limite de iteraçõesIncremento da variávelemumaunidade (através do operadorincremento ++)for (inti = 0; i < 10; i++){     println("Counting… ” + i); }
Exemplo 5if (v1 && v2) {strokeWeight(1);fill(150);for (int i = 0; i < 5; i++) {ellipse(centerX, centerY-150-20-100+i*20, 40, 40);  }  /*int n = 10;for (int i = 0; i < n; i++) {ellipse(centerX, centerY-150-20-100+i*100/n, 40, 40);  }*//*for (int y = centerY-150-20-100; y < centerY-150-20; y = y + 1) {ellipse(centerX, y, 40, 40);  }*/  }
Ciclo whileExecuta um conjunto de instruçõesenquantoumacondição for verdadeiraO testeéfeito antes da execuçãowhile (<condição>) {    <acções>}inti = 0;while (i <= 10) {    println("Counting... “ + i);    i = i + 1;}
Ciclo doExecuta um conjunto de instruçõesenquantoumacondição for verdadeiraO testeéfeitodepois da execuçãodo {   <acções>} while (<condição>);inti = 0;do {    println("Counting...  “ + i);    i = i + 1;} while (i <= 10);
ExercícioImplementeum programaque calculeumasequência de Fibonacci, segundo a seguinterelaçãorecorrente:F(n) = F(n-1) + F(n-2), com F(0) = 0 e F(1) = 1e.g.: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...4.1. Imprimaosprimeiros 100 números da sequência4.2. Imprimatodososnúmeros da sequênciainferiores a 10000
SoluçãointnumFibonacciNumbers = 100;long valN = 0;long valN_1 = 1;for (int n = 0; n < numFibonacciNumbers; n++) {    println(n + “ -> “ + valN));    valN = valN + valN_1;    valN_1 = valN - valN_1;}
ArraysUm array é um contentor de valores do mesmotipoarmazenadanumaregiãocontígua da memória RAMUm vector tem um nome e váriasposiçõesquepodemseracedidasatravés de um índice (entre parêntesis rectos [ ] ) :O índice tem de ser um valor inteiro    idade[0] = 23;   idade[1] = 47;   idade[2] = 11;   idade[3] = 92;   idade[4] = 76;   intage = idade[3]; //age = 92
Arrays - Declaração e InicializaçãoTal comoqualqueroutravariável, énecessárioindicarqual o tipo de valoresque o array iráguardar. Énecessáriotambémdefinirqual o tamanho do array, antes de o utilizar.<tipo> meuArray[];meuArray = new <tipo>[tamanho];intidades[];idades = new int[5];
Arrays - Declaração e InicializaçãoDeclarar e inicializarnumsópasso intidade[] = {23, 47, 11, 92, 76};
Arrays - índicesIndiceéumaexpressão do tipointeiroLiteralidade[1]Variávelidade[i]Expressãocomplexaidade[2*i+n]Podeserusadoparapercorrer um arrayatravés de um ciclo for, while, ...
Arrays - índicesPercorreros dados de um arrayPara leituraPara escritaO índicenãodeveultrapassar o tamanho do array!int age = idade[5] // ERROR!!    intarraySize = 5;//escreve dados no arrayfor (inti=0; i < arraySize; i++){    //apenas um exemplo...        idade[i] = (i+1)*(i+1); }//imprimeidadesinferiores a 20for(inti=0; i < arraySize; i++){    if (idade[i] < 20)        println(idade[i]);}
Exemplo 6intcenterX = 200;intcenterY = 300;boolean v1 = true;boolean v2 = true;int n = 10; // o numero de circuloscolor colors[] = new color[n];for (inti = 0; i < n; i++) {  colors[i] = color(random(255), random(255), random(255));}size(400, 600);background(255);stroke(0);strokeWeight(3);line(centerX-100, centerY-150, centerX+100, centerY+150);line(centerX-100, centerY+150, centerX+100, centerY-150);strokeWeight(2);stroke(0);noFill();if (v2) {  // curva superior  curve(centerX-100-100, centerY-150-150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150-150);  // curva inferior  curve(centerX-100-100, centerY+150+150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150+150);}if (v1) {  // curva superior  curve(centerX-100-100, centerY-150+150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150+150);  // curva inferior  curve(centerX-100-100, centerY+150-150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150-150);}if (v1 && v2) {strokeWeight(1);  for (inti = 0; i < n; i++) {    fill(colors[i]);    ellipse(centerX, centerY-150-20-100+i*100/n, 40, 40);}}
FunçõesUma função* éumaporção de códigoqueefectuaumatarefaespecífica. A divisão de um programaemváriasfunçõespermitecriarprogramasmaisestruturados, fáceis de manter e permitetambém a reutilização de códigoNa sua forma mais simples, umafunçãoé um bloco de código com um nomequepodemosusaremqualquer parte do programapara "chamar" e executaressebloco de código* Existemmuitasdesignaçõespara o conceito de função: procedimento, rotina, subrotina, método, subprograma. Todoselessignificam a mesmacoisa, mas sãousadosemdiferentescontextos.
Funçõesvoid draw() {    println("Executa o programa");    fazTarefaEspecifica1(); //chamada a umafunção!    fazTarefaEspecifica2(); //chamada a outrafunção!    fazTarefaEspecifica1(); //chamaoutravez a função 1!}void fazTarefaEspecifica1() {    println("Estafunçãoexecutaumasérie de operaçõesparacompletar a tarefa 1");}void fazTarefaEspecifica2() {    println("Estafunçãoexecutaumasérie de operaçõesparacompletar a tarefa 2");}
FunçõesSintaxeparadefinir a função void nomeFunção()  {      //código da função... }void é um tipo especial quesignifica "vazio", "semtipo" e nestecasoindicaque a funçãonãoretornaqualquer valor (verpróximos slides)Para invocar (i.e., executar o códigodentro da função)     nomeFunção();
Funções com ParâmetrosFunções com parâmetrosPodemoperarsobre dados diferentes de cadavezqueexecutam.Nestecaso, o códigoquechama a funçãodevepassarosvaloressobreosquais a funçãoiráexecutarPara issotemos de parametrizar a função (i.e., definirque dados o programa principal deveenviarpara a função)Usode funções com parâmetros (de entrada)Sintaxeparadefinir  funções com parâmetrosvoid nomeFunção(<tipo> nomeParam1, <tipo> nomeParam2, [...]) {        //código da função...}Para invocar (i.e., executar o códigodentro da função)nomeFunção(valorParam1, valorParam2);
Funções com Parâmetrosvoid draw() {    soma(1, 2); // escreve "3"    soma(3, 5); // escreve "8"}void soma(int num1, int num2) {    intresultado;    resultado = num1 + num2;    println(resultado);}
Funções com valor de retornoFunções com valor de retornoint soma(int num1, int num2)Emfunçõescomo a anterior, fazmaissentidoque a funçãodevolva o valor calculadoaocódigoquechamou a função (emvez de o imprimir, comoemexemplosanteriores...)Para tal a funçãodeveindicarqueretorna um valor e qual o seutipo (nesteexemplo um int)Na implementação da funçãoéobrigatóriofinalizar com um comando return
Funções com valor de retornovoid draw()    int num1;    int num2;    int r;    num1 = 1;    num2 = 2;    r = soma(num1, num2);     println(r);}int soma(int num1, int num2) {    intresultado;    resultado = num1 + num2;    return resultado; }
Funções com valor de retornoSintaxeparadefinir  funções com valor de retorno<tipo> nomeFunção(<tipo> nomeParam1, <tipo> nomeParam2, [...]) {    //código da função...    return valorDeRetorno;}Para invocar (i.e., executar o códigodentro da função)variavel = nomeFunção(valorParam1, valorParam2);Nãoénecessárioatribuir o resultado a umavariável, podeserusadodirectamentenumaexpressãoouusadocomoparâmetroparaoutrafunção
Exemplo 7void setup() {  size(400, 600);}void draw() {  background(255);duploCone(0, 0, 100, 100);duploCone(100, 100, 200, 200);duploCone(200, 200, 300, 300);duploCone(300, 300, 400, 400);}void duploCone(int x1, int y1, int x2, int y2) {  stroke(0);strokeWeight(3);  line(x1, y1, x2, y2);  line(x1, y2, x2, y1);strokeWeight(2);  stroke(0);noFill();  // curvassuperiores  curve(x1-100, y1-100,x1, y1, x2, y1, x2+100,y1-100);  curve(x1-100, y1+100,x1, y1, x2, y1, x2+100,y1+100);    // curvasinferiores  curve(x1-100, y2-100,x1, y2, x2, y2, x2+100,y2-100);  curve(x1-100, y2+100,x1, y2, x2, y2, x2+100,y2+100);}
Visibilidade das variáveisAs variáveispodemserdeclaradasemváriossítios do programafora de qualquerfunção (variável global)dentro de umafunção (variável local àfunção)dentro de outros blocos de código: { } (ifs, ciclos, etc)O sítioondesãodeclaradasdeterminaondepodemserlidas/escritasUma variável global podeserusadaemqualquer parte do programaUma variável local apenaspodeserusada no bloco (funçãooubloco de código) ondefoideclarada, incluindoblocosinternos a essebloco
Visibilidade das variáveisSe tentarmosusarumavariável local fora do blocoondefoideclarada, o compiladorassinala um erroNo entanto, énecessárioalgumcuidadoquando as variáveisglobais e locaistêm o mesmonomeNessasituaçãoéusada a variável com menorvisibilidade (a quefoideclaradadentro do bloco superior hierarquicamentemaispróximo)
Processing – animaçãoExemplo9int x;void setup() {  size(400, 400);frameRate(10);  x = 0;}void draw() {  background(0);  fill(244);rect(x, 10, 40, 40);  x = x + 1;}
Programação Orientada a Objectos
Objectos no mundo realObjectos no mundo real podemserdescritosatravés de duascaracterísticasessenciais: atributose comportamento. Porexemplo, o cão do João tem:  atributos:
Cor:  castanho
Tamanhopêlo: curto
Raça: Rafeiro
Idade: 3 anos
Nome: Bobi
comportamento
corre
ladra
senta-se
come
dormeObjectos no mundo realOutro exemplo: o automóvel do Jorge Atributos:
Cor: azul escuro
Marca: Opel
Modelo: Corsa
Velocidade: parado
Combustível: 30%

Introdução à Programacao em Processing

  • 1.
    IntroduçãoàProgramaçãoem ProcessingPrograma deDoutoramentoemCiência e Tecnologiadas Artes – Arte InteractivaJorge C. S. Cardosohttp://jorgecardoso.eu19 Fevereiro 2011
  • 2.
    TópicosConceitos de programaçãode computadoresHardware, evolução das linguagens de programação, códigofontevscódigomáquina, máquina virtual Estruturasbásicas de programaçãoem ProcessingVariáveis, condições, ciclos, funçõesProgramaçãoorientada a objectos (OOP)Classes, objectos, herança, construtores, destrutores, encapsulamento, herança, method overriding
  • 3.
    HardwareProcessadorCPU (Central ProcessingUnit)Éa parte de um sistema de computadorqueexecuta as instruções de um programa de computador
  • 4.
    HardwareMemória RAM (RandomAccess Memory)Volátil (precisa de alimentaçãoeléctricaparapreservaros dados)O CPU lêe escrevedirectamenteparaestamemóriaO programaque o CPU executaestáescritonamemória RAM
  • 5.
    HardwareMemóriapersistenteNãovolátil (mantémos dadosmesmosemalimentaçãoeléctrica)ExemplosDisco duroMemória Flash (cartões SD, Flash pen, …)OsprogramassãoarmazenadosnestamemóriaQuandoosexecutamospassampara a RAM
  • 6.
    Linguagens de ProgramaçãoProgramaSequênciade instruçõesque o CPU executaAs instruçõesestãona RAMExemploSomar 3 + 5 e multiplicar o resultadopor2Como éque o CPU fazisto? 
  • 7.
    CPUPossui memória internaMuito pouco espaçoAs unidades de memória interna do processador chamam-se registos Conhece uma lista de instruçõesPercorre a memória RAM e lê e executa instrução a instrução
  • 8.
    Evolução das linguagensOsprimeiros“programadores” de computadorescreviamprogramasemnúmerosUsavamdirectamente a tabela de instruções do processadormuitosujeito a erros...muitotrabalhoso...Criou-se umalinguagemmaisfácil de decorar e utilizar, baseadaemmnemónicasAssembly Language .model small.stack.datamessage db "Hello world, I'm learning Assembly !!!", "$".codemain procmovax,seg messagemovds,axmov ah,09lea dx,messageint 21hmov ax,4c00hint 21hmain endpend main
  • 9.
    Evolução das linguagensAslinguagens de programação foram evoluindo para sintaxes mais próximas da linguagem natural
  • 10.
  • 11.
    CódigofonteTexto que oprogramador escreve numa determinada linguagem de programação (e.g., ObjC, Java, ...)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. */}
  • 12.
    CódigoMáquina.codemain procmovax,seg messagemovds,axmovah,09lea dx,messageint 21hmov ax,4c00hint 21hmain endpend mainInstruçõesexecutadasdirectamentepeloprocessador
  • 13.
    O códigomáquinaresulta deum processo de tradução do códigofontenumalinguagementendidadirectamentepeloprocessador (sequência de números)Linguagens de Programação:  Criação de um executávelCompilador
  • 14.
  • 15.
  • 16.
  • 17.
    Combinaosdiferentesmódulos de códigomáquina(i.e. previamentecompilados) e gera o ficheiro final queiráserexecutadopela CPU
  • 18.
    Permite o usode bibliotecasdisponibilizadasporterceirosLinguagens de Programação:  Criação de executávelem JavaCompilador
  • 19.
    A linguagem Javaé compilada em código máquina para um processador virtual (máquina virtual)
  • 20.
    O código máquinaresultante é chamado "bytecode“
  • 21.
    Em Java nãoexiste necessidade de "linkagem"
  • 22.
    Uma aplicação Javaconsiste num conjunto destes ficheiros (e não apenas um)
  • 23.
    A máquina virtualtrata de carregar para a memória os ficheiros necessários à medida que o programa executaLinguagens de Programação:Máquina Virtual JavaA máquina virtual Java é um processador que não existe fisicamente (apenas existe a sua especificação)
  • 24.
    Este processador virtualé implementado através de software em qualquer computador
  • 25.
    Para correr umprograma Java temos de ter instalado este processador virtual (Java Virtual Machine - JVM)
  • 26.
    A vantagem éque o nosso programa corre em qualquer plataforma que tenha uma JVM instalada (só temos de compilar uma vez)Linguagens de ProgramaçãoO programapodeserdescritousandováriostipos de linguagens:“Natural”"tell Finder to open myDocument.doc”DiagramaProgramação (e.g., Java, C, Obj-C, C++)void draw() {background(0);/* actualizar posição */x = x + dirX;if ( x < minX || x > maxX ) {     dirX = -dirX;    x = x + dirX;    lX = x;}
  • 27.
    Linguagens de ProgramaçãoNadescrição de um programaéessencialdefinir:Ponto de entrada. Qual a primeirainstrução a executar?Sequência: comoavanço de instruçãoeminstrução?
  • 28.
  • 29.
    Permite a criaçãode programasquepodemserexecutadosemváriasplataformassemmodificação
  • 30.
  • 31.
  • 32.
    Osprogramasescritosem Java sãocompiladosnumcódigomáquinavirtual queédepois (aquando da execução do programa) transformadoemcódigomáquinarealLinguagens de ProgramaçãoProcessing“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
  • 33.
    Processing“Free to downloadand open sourceInteractive programs using 2D, 3D or PDF outputOpenGL integration for accelerated 3DFor GNU/Linux, Mac OS X, and WindowsProjects run online or as double-clickable applicationsOver 100 libraries extend the software into sound, video, computer vision, and more...Well documented, with many books available” – http://processing.org
  • 34.
    Processing ExamplesAnimation NokiaFriends (http://postspectacular.com/process/20080810_nokiafriends)ImaViz – Sound Visualizer (http://www.openprocessing.org/visuals/?visualID=9923hh)“Music”Ball droppings (http://balldroppings.com/js/)PSO VideoCatalina music video (http://moullinex.tumblr.com/post/3180520798/catalina-music-video)Papa Roach – Getting away with murder (http://processing.org/exhibition/works/papa/index.html)3DHair Ball (http://www.openprocessing.org/visuals/?visualID=12399)(Generative) DesignMarius Watz (http://www.unlekker.net)http://artes.ucp.pt/blogs/index.php/PMultimedia/2009/10/03/capas-de-livrosGames Pong Multiplayer (http://artes.ucp.pt/ftp/a0306005/index.html)InstalationsMy little piece of privacy (http://www.niklasroy.com/project/88/my-little-piece-of-privacy/)
  • 35.
  • 36.
  • 37.
  • 38.
    Exemplo 1size(400, 600);background(255);stroke(0);strokeWeight(3);line(100,150, 300, 450);line(100, 450, 300, 150);// curva superiorstrokeWeight(2);stroke(0);noFill();curve(0, 0, 100, 150, 300, 150, 400, 0);// pontos de controlo//fill(255, 0, 0);//noStroke();//ellipse(0, 0, 5, 5);//ellipse(400, 0, 5, 5);//curva inferiorstroke(0);noFill();curve(0, 600, 100, 450, 300, 450, 400, 600);
  • 39.
  • 40.
  • 41.
    IntroduçãoàProgramaçãoComentáriosServempara o programadorse ajudar a simesmo a lembrarporqueéque fez as coisas de determinada formaSão ignoradaspelocompilador// Comentáriode umalinha/* Comentário de váriaslinhas */intaddTwoNumbers( int num1, int num2 ){    //a comment: add the two numbers    int result = num1 + num2;    /* Some other comment    just to show how to do it    for multiple lines. */    return result;}
  • 42.
    VariáveisVariáveissãouma forma dearmazenarvaloresdurante a execução de um programaUma variávelé um nomequeutilizamosparanosreferirmos a um valorPodemosalterar o valor durante o programaSempreque o nomeéutilizado no programaéautomaticamentesubstituídopelo valor correspondenteintsomeNumber;intanotherNumber;int result;someNumber = 3;anotherNumber = 2;//result stores the value 3 * 2 = 6result = someNumber * anotherNumber;
  • 43.
    VariáveisAntes de podermosusarumavariáveltemosde a declarar. A declaraçãoindica o tipo de dados que a variávelvaiguardar.Inteiros (int, long) Decimais(float, double)Lógicos (boolean)Caracteres (char)Sintaxe:<tipo> nomeDaVariavel;<tipo> nomeDaVariavel = <valorinicial>;intmyNumber;long anotherNumber = 13;float aFloatNumber = 0.24;double aDoublePrecisionNumber = 1.23e2;booleanisActive = true;char aLetter = 'P';
  • 44.
    VariáveisPara guardarmos umvalor numavariáveltemos de atribuí-lo àvariável.minhaVariavel = <valor>;Aquiloqueatribuimos a umavariávelé o resultado de umaexpressão. Uma expressãopodeser:Literal : Um valor escritodirectamente no códigoidade= 33; // 33 é um literalVariável: O valor de umavariávelidade= idadeJoao; // idadeJoaoéoutravariávelFunção: O valor devolvidoporumafunçãodefinidapreviamenteidade= random(10); // random éumafunção Expressõesanterioresligadas com operadoresaritméticos : Definiçãorecursiva! idade= idadeJoao + 10 * 3;
  • 45.
    VariáveisAlgumasrestrições no usode nomesemvariáveis:Nomes das variáveistêmcomeçarcom umaletra do alfabeto (dígitosnãosãopermitidos) oupor um underscore (_)Nomes de variáveispodemconterletras e dígitos, mas espaçosou outros caracteresespeciaisnãosãopermitidos.Osnomes de variáveissão case sensitive (e.g. myNumberédiferente de mynumber)Palavrasreservadas do Java nãopodemserusadascomonomes de variáveis (e.g. int, float, for, while, do, break, ...)Osnomes das variáveisdevemserescolhidos de forma a tornar o seusignificado o maisclaro e legívelpossível.
  • 46.
    Exemplo 2intcenterX =100;intcenterY = 100;size(400, 600);background(255);stroke(0);strokeWeight(3);line(centerX-100, centerY-150, centerX+100, centerY+150);line(centerX-100, centerY+150, centerX+100, centerY-150);// curva superiorstrokeWeight(2);stroke(0);noFill();curve(centerX-200, centerY-300, centerX-100, centerY-150, centerX+100, centerY-150, centerX+200, centerY-300);//curva inferiorstroke(0);noFill();curve(centerX-200, centerY+300, centerX-100, centerY+150, centerX+100, centerY+150, centerX+200, centerY+300);
  • 47.
    OperadoresOperadoresaritméticos+ (adição)- (subtracção)* (multiplicação)/ (divisão, inteiraoufraccionária)% (resto dadivisãointeira - modulo)Osoperadoresnumaexpressãosãoaplicados da esquerdapara a direita, mas os operadores *, / e % têmprecedênciasobre + e -Se quisermosalterar a precedência, temos de usarparêntesis:  (  )1+2*3 = 1+6 = 7(1+2)*3 = 3*3 = 9
  • 48.
    Exercício 1Crie umprogramaem Java que:armazeneemduasvariáveisosvalores 5 e 2realize a divisão entre as variáveis (i.e. 5 / 2)guarde o resultadonumavariávelimprima o resultado da operaçãoDecisões a tomar:Quetipo de variáveisdefinir?int, float, double, ...??Quetipo a usarpara o resultado da divisão?int, float, double, ...??Existemdiferenças no resultado?divisãointeira VS divisãovírgulaflutuante...
  • 49.
    SoluçãointaNumber = 5;intanotherNumber= 2;float aFloat = 2.0f;float result;result = aNumber / anotherNumber;println(result);
  • 50.
    CondiçõesEmquasetodososprogramasénecessárioexecutaralgumasacçõesapenas se umadeterminadacondiçãofor verdadeira...CondiçõesifNa sua forma mais simples a estruturaif resume-se a executar um conjunto de acções se determinadacondição for verdadeira. 
  • 51.
    As chavetas{ }delimitamas acçõesexecutadascondicionalmente. if ([condição]) {     [acções] }
  • 52.
    CondiçõesifA condiçãoéumaexpressão dotipoboolean Literal true ou false Variável (boolean) com o valor true ou false Expressão com operadorescondicionaisbooleanisActive = true;if(isActive) //eqv. a if (isActive == true){    //do something...    isActive = false;}
  • 53.
    Exemplo 3intcenterX =200;intcenterY = 300;boolean v1 = false;size(400, 600);background(255);stroke(0);strokeWeight(3);line(centerX-100, centerY-150, centerX+100, centerY+150);line(centerX-100, centerY+150, centerX+100, centerY-150);strokeWeight(2);stroke(0);noFill();if (v1) { // curva superior curve(centerX-100-100, centerY-150-150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150-150); // curva inferior curve(centerX-100-100, centerY+150+150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150+150);} else { // curva superior curve(centerX-100-100, centerY-150+150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150+150); // curva inferior curve(centerX-100-100, centerY+150-150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150-150);}
  • 54.
    Condições ifAs condiçõesusadasnos testespodemusarosoperadorescondicionais: igual a: == (atenção!) maior do que: > menor do que: < maiorouigual a: >= menorouigual a: <= diferente: != O resultado de umaoperaçãocondicionalé um valor true ou falseintaNumber = 10;intanotherNumber = 6;boolean correct = false; if(9 == aNumber)    correct = true;if (anotherNumber > aNumber)    aNumber = anotherNumber;    
  • 55.
    Condições ifAlgumasvariantes da estruturaif:If... Else... If... Else if... If... Else if... Else...Switch
  • 56.
    Condições if... else...O iftambémnospermiteexecutaracções sea condição for falsaif (<condição>) {<acções A> //executado se a condição for true...} else {    <acções B> //executado se a condição for false...}
  • 57.
    Condições if... else ifÉpossívelcombinarifs sequencialmenteif (<condição A>) {    <acções A>} else if (<condição B>){     <acções B>} else {     <acções C>}
  • 58.
    OperadoresLógicosÉpossíveltestarcondiçõescomplexasatravés dos operadoreslógicos:operadoresquecombinamcomparações simples:AND : As duascomparaçõestêm de serverdadeirasaomesmo tempoOR : Pelomenosuma das comparações tem de serverdadeiroNOT : Inverte (i.e. nega) o valor da comparação
  • 59.
    OperadoresLógicosAND : &&OR: ||NOT : !if (x > 10 && x < 20) {println(“Entre 10 e 20”);}if (x < 10 || x > 20) {println(“Fora do intervalo [10; 20]”);}if (!(x < 10)) {println(“X não é menor do que 10”);}
  • 60.
    Exemplo 4intcenterX =200;intcenterY = 300;boolean v1 = true;boolean v2 = true;size(400, 600);background(255);stroke(0);strokeWeight(3);line(centerX-100, centerY-150, centerX+100, centerY+150);line(centerX-100, centerY+150, centerX+100, centerY-150);strokeWeight(2);stroke(0);noFill();if (v2) { // curva superior curve(centerX-100-100, centerY-150-150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150-150); // curva inferior curve(centerX-100-100, centerY+150+150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150+150);}if (v1) { // curva superior curve(centerX-100-100, centerY-150+150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150+150); // curva inferior curve(centerX-100-100, centerY+150-150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150-150);}if (v1 && v2) {strokeWeight(1); fill(150); ellipse(centerX, centerY-150-20, 40, 40);}
  • 61.
    Exercício 2Implementeum programaque:Defina3 variáveisparaarmazenartrêsinteirosàescolha (num1, num2 e num3)Teste se num1 éigual, maioroumenorque num2, e imprimaumamensagem do tipo "7 émaior do que 3".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".Divida num1 por num2, imprimindo o resultado, tendo o cuidado de verificar se num2 édiferente de zero!Divisõespor zero em Java provocamo "crash" da aplicação!
  • 62.
    Exercício 2int num1= 5;int num2 = 12;int num3 = 7;if(num1 == num2) {    println(num1 + “ is equal to ” + num2);} else if(num1 > num2){    println(num1 + “ is bigger than “ + num2);} else {    println(num1 + “ is smaller than ” + num2);     if (num3 > num1 && num3 < num2) {    println(num3 + “ is between “ + num1 + “ and “ + num2);    }}if(num2 != 0){    println("A divisão de ” + num1 + “ por “ + num2 + “ é “ + ((float)num1/num2));}
  • 63.
    CiclosOsciclospermitem-nosexecutar um conjuntode instruçõesrepetidamenteExistemduas classes de ciclos:Ciclosqueexecutam um númeropré-determinado de vezes: forCiclosqueexecutamenquantoumacondiçãoéverdadeira: do e while
  • 64.
    CicloforExecutado um númeropré-determinadode vezesfor (<inicialização>; <condição>; <incremento>) {    <acções>}Variável de cicloinicia-se em zero (e declara-se dentro do própriociclo)Condição simples com o limite de iteraçõesIncremento da variávelemumaunidade (através do operadorincremento ++)for (inti = 0; i < 10; i++){     println("Counting… ” + i); }
  • 65.
    Exemplo 5if (v1&& v2) {strokeWeight(1);fill(150);for (int i = 0; i < 5; i++) {ellipse(centerX, centerY-150-20-100+i*20, 40, 40); } /*int n = 10;for (int i = 0; i < n; i++) {ellipse(centerX, centerY-150-20-100+i*100/n, 40, 40); }*//*for (int y = centerY-150-20-100; y < centerY-150-20; y = y + 1) {ellipse(centerX, y, 40, 40); }*/ }
  • 66.
    Ciclo whileExecuta um conjuntode instruçõesenquantoumacondição for verdadeiraO testeéfeito antes da execuçãowhile (<condição>) {    <acções>}inti = 0;while (i <= 10) {    println("Counting... “ + i);    i = i + 1;}
  • 67.
    Ciclo doExecuta um conjuntode instruçõesenquantoumacondição for verdadeiraO testeéfeitodepois da execuçãodo { <acções>} while (<condição>);inti = 0;do {    println("Counting... “ + i);    i = i + 1;} while (i <= 10);
  • 68.
    ExercícioImplementeum programaque calculeumasequência deFibonacci, segundo a seguinterelaçãorecorrente:F(n) = F(n-1) + F(n-2), com F(0) = 0 e F(1) = 1e.g.: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...4.1. Imprimaosprimeiros 100 números da sequência4.2. Imprimatodososnúmeros da sequênciainferiores a 10000
  • 69.
    SoluçãointnumFibonacciNumbers = 100;longvalN = 0;long valN_1 = 1;for (int n = 0; n < numFibonacciNumbers; n++) {    println(n + “ -> “ + valN));    valN = valN + valN_1;    valN_1 = valN - valN_1;}
  • 70.
    ArraysUm array éum contentor de valores do mesmotipoarmazenadanumaregiãocontígua da memória RAMUm vector tem um nome e váriasposiçõesquepodemseracedidasatravés de um índice (entre parêntesis rectos [ ] ) :O índice tem de ser um valor inteiro    idade[0] = 23;   idade[1] = 47;   idade[2] = 11;   idade[3] = 92;   idade[4] = 76;   intage = idade[3]; //age = 92
  • 71.
    Arrays - Declaraçãoe InicializaçãoTal comoqualqueroutravariável, énecessárioindicarqual o tipo de valoresque o array iráguardar. Énecessáriotambémdefinirqual o tamanho do array, antes de o utilizar.<tipo> meuArray[];meuArray = new <tipo>[tamanho];intidades[];idades = new int[5];
  • 72.
    Arrays - Declaraçãoe InicializaçãoDeclarar e inicializarnumsópasso intidade[] = {23, 47, 11, 92, 76};
  • 73.
    Arrays - índicesIndiceéumaexpressãodo tipointeiroLiteralidade[1]Variávelidade[i]Expressãocomplexaidade[2*i+n]Podeserusadoparapercorrer um arrayatravés de um ciclo for, while, ...
  • 74.
    Arrays - índicesPercorrerosdados de um arrayPara leituraPara escritaO índicenãodeveultrapassar o tamanho do array!int age = idade[5] // ERROR!!    intarraySize = 5;//escreve dados no arrayfor (inti=0; i < arraySize; i++){    //apenas um exemplo...        idade[i] = (i+1)*(i+1); }//imprimeidadesinferiores a 20for(inti=0; i < arraySize; i++){    if (idade[i] < 20)        println(idade[i]);}
  • 75.
    Exemplo 6intcenterX =200;intcenterY = 300;boolean v1 = true;boolean v2 = true;int n = 10; // o numero de circuloscolor colors[] = new color[n];for (inti = 0; i < n; i++) { colors[i] = color(random(255), random(255), random(255));}size(400, 600);background(255);stroke(0);strokeWeight(3);line(centerX-100, centerY-150, centerX+100, centerY+150);line(centerX-100, centerY+150, centerX+100, centerY-150);strokeWeight(2);stroke(0);noFill();if (v2) { // curva superior curve(centerX-100-100, centerY-150-150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150-150); // curva inferior curve(centerX-100-100, centerY+150+150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150+150);}if (v1) { // curva superior curve(centerX-100-100, centerY-150+150, centerX-100, centerY-150, centerX+100, centerY-150, centerX+100+100, centerY-150+150); // curva inferior curve(centerX-100-100, centerY+150-150, centerX-100, centerY+150, centerX+100, centerY+150, centerX+100+100, centerY+150-150);}if (v1 && v2) {strokeWeight(1); for (inti = 0; i < n; i++) { fill(colors[i]); ellipse(centerX, centerY-150-20-100+i*100/n, 40, 40);}}
  • 76.
    FunçõesUma função* éumaporçãode códigoqueefectuaumatarefaespecífica. A divisão de um programaemváriasfunçõespermitecriarprogramasmaisestruturados, fáceis de manter e permitetambém a reutilização de códigoNa sua forma mais simples, umafunçãoé um bloco de código com um nomequepodemosusaremqualquer parte do programapara "chamar" e executaressebloco de código* Existemmuitasdesignaçõespara o conceito de função: procedimento, rotina, subrotina, método, subprograma. Todoselessignificam a mesmacoisa, mas sãousadosemdiferentescontextos.
  • 77.
    Funçõesvoid draw() {   println("Executa o programa");    fazTarefaEspecifica1(); //chamada a umafunção!    fazTarefaEspecifica2(); //chamada a outrafunção!    fazTarefaEspecifica1(); //chamaoutravez a função 1!}void fazTarefaEspecifica1() {    println("Estafunçãoexecutaumasérie de operaçõesparacompletar a tarefa 1");}void fazTarefaEspecifica2() {    println("Estafunçãoexecutaumasérie de operaçõesparacompletar a tarefa 2");}
  • 78.
    FunçõesSintaxeparadefinir a função voidnomeFunção()  {      //código da função... }void é um tipo especial quesignifica "vazio", "semtipo" e nestecasoindicaque a funçãonãoretornaqualquer valor (verpróximos slides)Para invocar (i.e., executar o códigodentro da função)     nomeFunção();
  • 79.
    Funções com ParâmetrosFunçõescom parâmetrosPodemoperarsobre dados diferentes de cadavezqueexecutam.Nestecaso, o códigoquechama a funçãodevepassarosvaloressobreosquais a funçãoiráexecutarPara issotemos de parametrizar a função (i.e., definirque dados o programa principal deveenviarpara a função)Usode funções com parâmetros (de entrada)Sintaxeparadefinir  funções com parâmetrosvoid nomeFunção(<tipo> nomeParam1, <tipo> nomeParam2, [...]) {        //código da função...}Para invocar (i.e., executar o códigodentro da função)nomeFunção(valorParam1, valorParam2);
  • 80.
    Funções com Parâmetrosvoiddraw() {    soma(1, 2); // escreve "3"    soma(3, 5); // escreve "8"}void soma(int num1, int num2) {    intresultado;    resultado = num1 + num2;    println(resultado);}
  • 81.
    Funções com valorde retornoFunções com valor de retornoint soma(int num1, int num2)Emfunçõescomo a anterior, fazmaissentidoque a funçãodevolva o valor calculadoaocódigoquechamou a função (emvez de o imprimir, comoemexemplosanteriores...)Para tal a funçãodeveindicarqueretorna um valor e qual o seutipo (nesteexemplo um int)Na implementação da funçãoéobrigatóriofinalizar com um comando return
  • 82.
    Funções com valorde retornovoid draw()    int num1;    int num2;    int r;    num1 = 1;    num2 = 2;    r = soma(num1, num2);     println(r);}int soma(int num1, int num2) {    intresultado;    resultado = num1 + num2;    return resultado; }
  • 83.
    Funções com valorde retornoSintaxeparadefinir  funções com valor de retorno<tipo> nomeFunção(<tipo> nomeParam1, <tipo> nomeParam2, [...]) {    //código da função...    return valorDeRetorno;}Para invocar (i.e., executar o códigodentro da função)variavel = nomeFunção(valorParam1, valorParam2);Nãoénecessárioatribuir o resultado a umavariável, podeserusadodirectamentenumaexpressãoouusadocomoparâmetroparaoutrafunção
  • 84.
    Exemplo 7void setup(){ size(400, 600);}void draw() { background(255);duploCone(0, 0, 100, 100);duploCone(100, 100, 200, 200);duploCone(200, 200, 300, 300);duploCone(300, 300, 400, 400);}void duploCone(int x1, int y1, int x2, int y2) { stroke(0);strokeWeight(3); line(x1, y1, x2, y2); line(x1, y2, x2, y1);strokeWeight(2); stroke(0);noFill(); // curvassuperiores curve(x1-100, y1-100,x1, y1, x2, y1, x2+100,y1-100); curve(x1-100, y1+100,x1, y1, x2, y1, x2+100,y1+100); // curvasinferiores curve(x1-100, y2-100,x1, y2, x2, y2, x2+100,y2-100); curve(x1-100, y2+100,x1, y2, x2, y2, x2+100,y2+100);}
  • 85.
    Visibilidade das variáveisAsvariáveispodemserdeclaradasemváriossítios do programafora de qualquerfunção (variável global)dentro de umafunção (variável local àfunção)dentro de outros blocos de código: { } (ifs, ciclos, etc)O sítioondesãodeclaradasdeterminaondepodemserlidas/escritasUma variável global podeserusadaemqualquer parte do programaUma variável local apenaspodeserusada no bloco (funçãooubloco de código) ondefoideclarada, incluindoblocosinternos a essebloco
  • 86.
    Visibilidade das variáveisSetentarmosusarumavariável local fora do blocoondefoideclarada, o compiladorassinala um erroNo entanto, énecessárioalgumcuidadoquando as variáveisglobais e locaistêm o mesmonomeNessasituaçãoéusada a variável com menorvisibilidade (a quefoideclaradadentro do bloco superior hierarquicamentemaispróximo)
  • 87.
    Processing – animaçãoExemplo9intx;void setup() { size(400, 400);frameRate(10); x = 0;}void draw() { background(0); fill(244);rect(x, 10, 40, 40); x = x + 1;}
  • 88.
  • 89.
    Objectos no mundorealObjectos no mundo real podemserdescritosatravés de duascaracterísticasessenciais: atributose comportamento. Porexemplo, o cão do João tem:  atributos:
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
    dormeObjectos no mundorealOutro exemplo: o automóvel do Jorge Atributos:
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.