SlideShare uma empresa Scribd logo
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%

Mais conteúdo relacionado

Mais procurados

Linguagem C e Dev-C++ Algumas Explicações
Linguagem C e Dev-C++  Algumas ExplicaçõesLinguagem C e Dev-C++  Algumas Explicações
Linguagem C e Dev-C++ Algumas Explicações
nataferraz
 
O compilador dev c++
O compilador dev c++O compilador dev c++
O compilador dev c++
Clausia Antoneli
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
Heider Lopes
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
profwtelles
 
Notas deaulas
Notas deaulasNotas deaulas
Notas deaulas
Jcradio Vw
 
Linguagem C (UFRPE)
Linguagem C (UFRPE)Linguagem C (UFRPE)
Linguagem C (UFRPE)
guest14543db
 
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
Arthur Francisco Lorenzon
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013
Arthur Francisco Lorenzon
 
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
Tutorial dev cpp   001 - criação, leitura e alteração de arquivosTutorial dev cpp   001 - criação, leitura e alteração de arquivos
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
Flávio Freitas
 
Linguagem C 01 - Tópicos Introdutórios
Linguagem C 01 - Tópicos IntrodutóriosLinguagem C 01 - Tópicos Introdutórios
Linguagem C 01 - Tópicos Introdutórios
Fabio Spanhol
 
A linguagem de programação Erlang
A linguagem de programação ErlangA linguagem de programação Erlang
A linguagem de programação Erlang
elliando dias
 
Linguagem assembly
Linguagem assemblyLinguagem assembly
Linguagem assembly
JOEL FARIA HAUK
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
Rafael Martins
 
Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de Programação
Jose Augusto Cintra
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
Jose Augusto Cintra
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - Compiladores
Anderson Favaro
 
Programação em-arduino-módulo-básico
Programação em-arduino-módulo-básicoProgramação em-arduino-módulo-básico
Programação em-arduino-módulo-básico
Fátima Bernardes
 
18. arduino
18. arduino18. arduino
18. arduino
Eugenio Caetano
 
Trabalho linguagem python
Trabalho linguagem  pythonTrabalho linguagem  python
Trabalho linguagem python
Bruno Maspoli
 
A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação c
Clausia Antoneli
 

Mais procurados (20)

Linguagem C e Dev-C++ Algumas Explicações
Linguagem C e Dev-C++  Algumas ExplicaçõesLinguagem C e Dev-C++  Algumas Explicações
Linguagem C e Dev-C++ Algumas Explicações
 
O compilador dev c++
O compilador dev c++O compilador dev c++
O compilador dev c++
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
 
Notas deaulas
Notas deaulasNotas deaulas
Notas deaulas
 
Linguagem C (UFRPE)
Linguagem C (UFRPE)Linguagem C (UFRPE)
Linguagem C (UFRPE)
 
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
Mini Curso Programação Paralela utilizando OpenMP - SACTA 2013
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013
 
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
Tutorial dev cpp   001 - criação, leitura e alteração de arquivosTutorial dev cpp   001 - criação, leitura e alteração de arquivos
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
 
Linguagem C 01 - Tópicos Introdutórios
Linguagem C 01 - Tópicos IntrodutóriosLinguagem C 01 - Tópicos Introdutórios
Linguagem C 01 - Tópicos Introdutórios
 
A linguagem de programação Erlang
A linguagem de programação ErlangA linguagem de programação Erlang
A linguagem de programação Erlang
 
Linguagem assembly
Linguagem assemblyLinguagem assembly
Linguagem assembly
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
 
Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de Programação
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - Compiladores
 
Programação em-arduino-módulo-básico
Programação em-arduino-módulo-básicoProgramação em-arduino-módulo-básico
Programação em-arduino-módulo-básico
 
18. arduino
18. arduino18. arduino
18. arduino
 
Trabalho linguagem python
Trabalho linguagem  pythonTrabalho linguagem  python
Trabalho linguagem python
 
A linguagem de programação c
A linguagem de programação cA linguagem de programação c
A linguagem de programação c
 

Semelhante a Introdução à Programacao em Processing

ptt
pttptt
Aula 03 isc -softwares-hardwares-arquiteturas
Aula 03   isc -softwares-hardwares-arquiteturasAula 03   isc -softwares-hardwares-arquiteturas
Aula 03 isc -softwares-hardwares-arquiteturas
Fábio Andrade
 
conhecer o computador
conhecer o computadorconhecer o computador
conhecer o computador
gongas
 
computador
computadorcomputador
computador
gongas
 
Code Masters
Code MastersCode Masters
Code Masters
Eduardo Borges
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
Luis Ferreira
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
Fábio Andrade
 
Software e hardware
Software e hardwareSoftware e hardware
Software e hardware
Williane Karla
 
Aula 02 informática aplicada - sistemas operacionais
Aula 02  informática aplicada - sistemas operacionaisAula 02  informática aplicada - sistemas operacionais
Aula 02 informática aplicada - sistemas operacionais
Robson Ferreira
 
Hardware e sistemas operacionais
Hardware e sistemas operacionaisHardware e sistemas operacionais
Hardware e sistemas operacionais
Carlos Eduardo Negri de Souza
 
Organização de computadores
Organização de computadoresOrganização de computadores
Organização de computadores
Tiago
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_Implementação
Wagner Zaparoli
 
Aula 02 - Introdução a ALGORITMOS.pptx
Aula 02 - Introdução a ALGORITMOS.pptxAula 02 - Introdução a ALGORITMOS.pptx
Aula 02 - Introdução a ALGORITMOS.pptx
judsonBg3
 
Aula 1
Aula 1Aula 1
EmuTerMF
EmuTerMFEmuTerMF
EmuTerMF
marco6juliana
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
JoseVieira75
 
Programação de Microprocessadores
Programação de MicroprocessadoresProgramação de Microprocessadores
Programação de Microprocessadores
Diogo Silva
 
Hardware e software
Hardware e softwareHardware e software
Hardware e software
leonardovieiradias
 
Hardware e software
Hardware e softwareHardware e software
Hardware e software
jotacabral
 
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos IniciaisFundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Helder Lopes
 

Semelhante a Introdução à Programacao em Processing (20)

ptt
pttptt
ptt
 
Aula 03 isc -softwares-hardwares-arquiteturas
Aula 03   isc -softwares-hardwares-arquiteturasAula 03   isc -softwares-hardwares-arquiteturas
Aula 03 isc -softwares-hardwares-arquiteturas
 
conhecer o computador
conhecer o computadorconhecer o computador
conhecer o computador
 
computador
computadorcomputador
computador
 
Code Masters
Code MastersCode Masters
Code Masters
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
 
Software e hardware
Software e hardwareSoftware e hardware
Software e hardware
 
Aula 02 informática aplicada - sistemas operacionais
Aula 02  informática aplicada - sistemas operacionaisAula 02  informática aplicada - sistemas operacionais
Aula 02 informática aplicada - sistemas operacionais
 
Hardware e sistemas operacionais
Hardware e sistemas operacionaisHardware e sistemas operacionais
Hardware e sistemas operacionais
 
Organização de computadores
Organização de computadoresOrganização de computadores
Organização de computadores
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_Implementação
 
Aula 02 - Introdução a ALGORITMOS.pptx
Aula 02 - Introdução a ALGORITMOS.pptxAula 02 - Introdução a ALGORITMOS.pptx
Aula 02 - Introdução a ALGORITMOS.pptx
 
Aula 1
Aula 1Aula 1
Aula 1
 
EmuTerMF
EmuTerMFEmuTerMF
EmuTerMF
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Programação de Microprocessadores
Programação de MicroprocessadoresProgramação de Microprocessadores
Programação de Microprocessadores
 
Hardware e software
Hardware e softwareHardware e software
Hardware e software
 
Hardware e software
Hardware e softwareHardware e software
Hardware e software
 
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos IniciaisFundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
 

Mais de Jorge Cardoso

Criação de Ambientes de Realidade Virtual usando A-Frame - CubeCraft Toys -...
Criação de Ambientes  de Realidade Virtual  usando A-Frame - CubeCraft Toys -...Criação de Ambientes  de Realidade Virtual  usando A-Frame - CubeCraft Toys -...
Criação de Ambientes de Realidade Virtual usando A-Frame - CubeCraft Toys -...
Jorge Cardoso
 
Criação de Ambientes de Realidade Virtual usando A-Frame
Criação de Ambientes  de Realidade Virtual  usando A-FrameCriação de Ambientes  de Realidade Virtual  usando A-Frame
Criação de Ambientes de Realidade Virtual usando A-Frame
Jorge Cardoso
 
Journal of Science and Technology of the Arts
Journal of Science and Technology of the ArtsJournal of Science and Technology of the Arts
Journal of Science and Technology of the Arts
Jorge Cardoso
 
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic AugmentationEvaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
Jorge Cardoso
 
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
Jorge Cardoso
 
Digital tools for exploring roman mosaic
Digital tools for exploring roman mosaicDigital tools for exploring roman mosaic
Digital tools for exploring roman mosaic
Jorge Cardoso
 
Interaction techniques for locomotion in virtual reality
Interaction techniques for locomotion in virtual realityInteraction techniques for locomotion in virtual reality
Interaction techniques for locomotion in virtual reality
Jorge Cardoso
 
Interacção em ambientes de realidade virtual
Interacção em ambientes de realidade virtualInteracção em ambientes de realidade virtual
Interacção em ambientes de realidade virtual
Jorge Cardoso
 
PhD defense presentation
PhD defense presentationPhD defense presentation
PhD defense presentation
Jorge Cardoso
 
Dynamic graphical user interface generation for web-based public display appl...
Dynamic graphical user interface generation for web-based public display appl...Dynamic graphical user interface generation for web-based public display appl...
Dynamic graphical user interface generation for web-based public display appl...
Jorge Cardoso
 
Evaluation of a programming toolkit for interactive public display applications
Evaluation of a programming toolkit for interactive public display applicationsEvaluation of a programming toolkit for interactive public display applications
Evaluation of a programming toolkit for interactive public display applications
Jorge Cardoso
 
Interaction modalities, technologies and tools for interactive art
Interaction modalities, technologies and tools for interactive artInteraction modalities, technologies and tools for interactive art
Interaction modalities, technologies and tools for interactive art
Jorge Cardoso
 
PuReWidgets toolkit
PuReWidgets toolkitPuReWidgets toolkit
PuReWidgets toolkit
Jorge Cardoso
 
PuReWidgets presentation at EICS 2012
PuReWidgets presentation at EICS 2012PuReWidgets presentation at EICS 2012
PuReWidgets presentation at EICS 2012
Jorge Cardoso
 
PuReWidgets toolkit
PuReWidgets toolkit PuReWidgets toolkit
PuReWidgets toolkit
Jorge Cardoso
 
Assessing Feedback for Indirect Shared Interaction
Assessing Feedback for Indirect Shared InteractionAssessing Feedback for Indirect Shared Interaction
Assessing Feedback for Indirect Shared Interaction
Jorge Cardoso
 
Oop java
Oop javaOop java
Oop java
Jorge Cardoso
 
Computer vision techniques for interactive art
Computer vision techniques for interactive artComputer vision techniques for interactive art
Computer vision techniques for interactive art
Jorge Cardoso
 
Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)
Jorge Cardoso
 
Introdução à programação para Android
Introdução à programação para AndroidIntrodução à programação para Android
Introdução à programação para Android
Jorge Cardoso
 

Mais de Jorge Cardoso (20)

Criação de Ambientes de Realidade Virtual usando A-Frame - CubeCraft Toys -...
Criação de Ambientes  de Realidade Virtual  usando A-Frame - CubeCraft Toys -...Criação de Ambientes  de Realidade Virtual  usando A-Frame - CubeCraft Toys -...
Criação de Ambientes de Realidade Virtual usando A-Frame - CubeCraft Toys -...
 
Criação de Ambientes de Realidade Virtual usando A-Frame
Criação de Ambientes  de Realidade Virtual  usando A-FrameCriação de Ambientes  de Realidade Virtual  usando A-Frame
Criação de Ambientes de Realidade Virtual usando A-Frame
 
Journal of Science and Technology of the Arts
Journal of Science and Technology of the ArtsJournal of Science and Technology of the Arts
Journal of Science and Technology of the Arts
 
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic AugmentationEvaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
Evaluation of Multi-Platform Mobile AR Frameworks for Roman Mosaic Augmentation
 
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
ConímbrigAR A Prototype Augmented Mobile Application for Exploration of Roman...
 
Digital tools for exploring roman mosaic
Digital tools for exploring roman mosaicDigital tools for exploring roman mosaic
Digital tools for exploring roman mosaic
 
Interaction techniques for locomotion in virtual reality
Interaction techniques for locomotion in virtual realityInteraction techniques for locomotion in virtual reality
Interaction techniques for locomotion in virtual reality
 
Interacção em ambientes de realidade virtual
Interacção em ambientes de realidade virtualInteracção em ambientes de realidade virtual
Interacção em ambientes de realidade virtual
 
PhD defense presentation
PhD defense presentationPhD defense presentation
PhD defense presentation
 
Dynamic graphical user interface generation for web-based public display appl...
Dynamic graphical user interface generation for web-based public display appl...Dynamic graphical user interface generation for web-based public display appl...
Dynamic graphical user interface generation for web-based public display appl...
 
Evaluation of a programming toolkit for interactive public display applications
Evaluation of a programming toolkit for interactive public display applicationsEvaluation of a programming toolkit for interactive public display applications
Evaluation of a programming toolkit for interactive public display applications
 
Interaction modalities, technologies and tools for interactive art
Interaction modalities, technologies and tools for interactive artInteraction modalities, technologies and tools for interactive art
Interaction modalities, technologies and tools for interactive art
 
PuReWidgets toolkit
PuReWidgets toolkitPuReWidgets toolkit
PuReWidgets toolkit
 
PuReWidgets presentation at EICS 2012
PuReWidgets presentation at EICS 2012PuReWidgets presentation at EICS 2012
PuReWidgets presentation at EICS 2012
 
PuReWidgets toolkit
PuReWidgets toolkit PuReWidgets toolkit
PuReWidgets toolkit
 
Assessing Feedback for Indirect Shared Interaction
Assessing Feedback for Indirect Shared InteractionAssessing Feedback for Indirect Shared Interaction
Assessing Feedback for Indirect Shared Interaction
 
Oop java
Oop javaOop java
Oop java
 
Computer vision techniques for interactive art
Computer vision techniques for interactive artComputer vision techniques for interactive art
Computer vision techniques for interactive art
 
Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)
 
Introdução à programação para Android
Introdução à programação para AndroidIntrodução à programação para Android
Introdução à programação para Android
 

Último

Texto e atividade - O que fazemos com a água que usamos.
Texto e atividade -  O que fazemos com a água que usamos.Texto e atividade -  O que fazemos com a água que usamos.
Texto e atividade - O que fazemos com a água que usamos.
Mary Alvarenga
 
Infografia | Presidência húngara do Conselho da UE
Infografia | Presidência húngara do Conselho da UEInfografia | Presidência húngara do Conselho da UE
Infografia | Presidência húngara do Conselho da UE
Centro Jacques Delors
 
Caça - palavras e cruzadinha com dígrafos
Caça - palavras  e cruzadinha   com  dígrafosCaça - palavras  e cruzadinha   com  dígrafos
Caça - palavras e cruzadinha com dígrafos
Mary Alvarenga
 
Auxiliar Adolescente 2024 3 trimestre 24
Auxiliar Adolescente 2024 3 trimestre 24Auxiliar Adolescente 2024 3 trimestre 24
Auxiliar Adolescente 2024 3 trimestre 24
DirceuSilva26
 
escrita criativa utilizada na arteterapia
escrita criativa   utilizada na arteterapiaescrita criativa   utilizada na arteterapia
escrita criativa utilizada na arteterapia
shirleisousa9166
 
oficia de construção de recursos para aluno DI.pdf
oficia de construção de recursos para aluno DI.pdfoficia de construção de recursos para aluno DI.pdf
oficia de construção de recursos para aluno DI.pdf
marcos oliveira
 
Slide para aplicação da AVAL. FLUÊNCIA.pptx
Slide para aplicação  da AVAL. FLUÊNCIA.pptxSlide para aplicação  da AVAL. FLUÊNCIA.pptx
Slide para aplicação da AVAL. FLUÊNCIA.pptx
LeilaVilasboas
 
1°ao5°ano_HISTÓRIA_ORGANIZADOR CURRICULAR BIMESTRAL (1) educação infantil fu...
1°ao5°ano_HISTÓRIA_ORGANIZADOR CURRICULAR BIMESTRAL (1)  educação infantil fu...1°ao5°ano_HISTÓRIA_ORGANIZADOR CURRICULAR BIMESTRAL (1)  educação infantil fu...
1°ao5°ano_HISTÓRIA_ORGANIZADOR CURRICULAR BIMESTRAL (1) educação infantil fu...
antonio carlos
 
Guerra de reconquista da Península ibérica
Guerra de reconquista da Península ibéricaGuerra de reconquista da Península ibérica
Guerra de reconquista da Península ibérica
felipescherner
 
Caderno_de_referencias_Ocupacaohumana_IV_FlaviaCoelho_compressed.pdf
Caderno_de_referencias_Ocupacaohumana_IV_FlaviaCoelho_compressed.pdfCaderno_de_referencias_Ocupacaohumana_IV_FlaviaCoelho_compressed.pdf
Caderno_de_referencias_Ocupacaohumana_IV_FlaviaCoelho_compressed.pdf
shirleisousa9166
 
Slides Lição 2, CPAD, O Livro de Rute, 3Tr24.pptx
Slides Lição 2, CPAD, O Livro de Rute, 3Tr24.pptxSlides Lição 2, CPAD, O Livro de Rute, 3Tr24.pptx
Slides Lição 2, CPAD, O Livro de Rute, 3Tr24.pptx
LuizHenriquedeAlmeid6
 
Relatório de Atividades 2021/2022 CENSIPAM.pdf
Relatório de Atividades 2021/2022 CENSIPAM.pdfRelatório de Atividades 2021/2022 CENSIPAM.pdf
Relatório de Atividades 2021/2022 CENSIPAM.pdf
Falcão Brasil
 
Caça-palavras e cruzadinha - Encontros consonantais.
Caça-palavras e cruzadinha -  Encontros consonantais.Caça-palavras e cruzadinha -  Encontros consonantais.
Caça-palavras e cruzadinha - Encontros consonantais.
Mary Alvarenga
 
A experiência do professor. Publicado EM 08.07.2024
A experiência do professor. Publicado EM 08.07.2024A experiência do professor. Publicado EM 08.07.2024
A experiência do professor. Publicado EM 08.07.2024
Espanhol Online
 
Relatório de Atividades 2017 CENSIPAM.pdf
Relatório de Atividades 2017 CENSIPAM.pdfRelatório de Atividades 2017 CENSIPAM.pdf
Relatório de Atividades 2017 CENSIPAM.pdf
Falcão Brasil
 
Painel para comemerorar odia dos avós grátis.pdf
Painel  para comemerorar odia dos avós grátis.pdfPainel  para comemerorar odia dos avós grátis.pdf
Painel para comemerorar odia dos avós grátis.pdf
marcos oliveira
 
A perspectiva colaborativa e as novas práticas de inclusão. (1).pptx
A perspectiva colaborativa e as novas práticas de inclusão. (1).pptxA perspectiva colaborativa e as novas práticas de inclusão. (1).pptx
A perspectiva colaborativa e as novas práticas de inclusão. (1).pptx
marcos oliveira
 
Oficina de bases de dados - Dimensions.pdf
Oficina de bases de dados - Dimensions.pdfOficina de bases de dados - Dimensions.pdf
Oficina de bases de dados - Dimensions.pdf
beathrizalves131
 

Último (20)

Texto e atividade - O que fazemos com a água que usamos.
Texto e atividade -  O que fazemos com a água que usamos.Texto e atividade -  O que fazemos com a água que usamos.
Texto e atividade - O que fazemos com a água que usamos.
 
Infografia | Presidência húngara do Conselho da UE
Infografia | Presidência húngara do Conselho da UEInfografia | Presidência húngara do Conselho da UE
Infografia | Presidência húngara do Conselho da UE
 
Caça - palavras e cruzadinha com dígrafos
Caça - palavras  e cruzadinha   com  dígrafosCaça - palavras  e cruzadinha   com  dígrafos
Caça - palavras e cruzadinha com dígrafos
 
Auxiliar Adolescente 2024 3 trimestre 24
Auxiliar Adolescente 2024 3 trimestre 24Auxiliar Adolescente 2024 3 trimestre 24
Auxiliar Adolescente 2024 3 trimestre 24
 
escrita criativa utilizada na arteterapia
escrita criativa   utilizada na arteterapiaescrita criativa   utilizada na arteterapia
escrita criativa utilizada na arteterapia
 
oficia de construção de recursos para aluno DI.pdf
oficia de construção de recursos para aluno DI.pdfoficia de construção de recursos para aluno DI.pdf
oficia de construção de recursos para aluno DI.pdf
 
Slide para aplicação da AVAL. FLUÊNCIA.pptx
Slide para aplicação  da AVAL. FLUÊNCIA.pptxSlide para aplicação  da AVAL. FLUÊNCIA.pptx
Slide para aplicação da AVAL. FLUÊNCIA.pptx
 
1°ao5°ano_HISTÓRIA_ORGANIZADOR CURRICULAR BIMESTRAL (1) educação infantil fu...
1°ao5°ano_HISTÓRIA_ORGANIZADOR CURRICULAR BIMESTRAL (1)  educação infantil fu...1°ao5°ano_HISTÓRIA_ORGANIZADOR CURRICULAR BIMESTRAL (1)  educação infantil fu...
1°ao5°ano_HISTÓRIA_ORGANIZADOR CURRICULAR BIMESTRAL (1) educação infantil fu...
 
Guerra de reconquista da Península ibérica
Guerra de reconquista da Península ibéricaGuerra de reconquista da Península ibérica
Guerra de reconquista da Península ibérica
 
Caderno_de_referencias_Ocupacaohumana_IV_FlaviaCoelho_compressed.pdf
Caderno_de_referencias_Ocupacaohumana_IV_FlaviaCoelho_compressed.pdfCaderno_de_referencias_Ocupacaohumana_IV_FlaviaCoelho_compressed.pdf
Caderno_de_referencias_Ocupacaohumana_IV_FlaviaCoelho_compressed.pdf
 
Slides Lição 2, CPAD, O Livro de Rute, 3Tr24.pptx
Slides Lição 2, CPAD, O Livro de Rute, 3Tr24.pptxSlides Lição 2, CPAD, O Livro de Rute, 3Tr24.pptx
Slides Lição 2, CPAD, O Livro de Rute, 3Tr24.pptx
 
Relatório de Atividades 2021/2022 CENSIPAM.pdf
Relatório de Atividades 2021/2022 CENSIPAM.pdfRelatório de Atividades 2021/2022 CENSIPAM.pdf
Relatório de Atividades 2021/2022 CENSIPAM.pdf
 
Caça-palavras e cruzadinha - Encontros consonantais.
Caça-palavras e cruzadinha -  Encontros consonantais.Caça-palavras e cruzadinha -  Encontros consonantais.
Caça-palavras e cruzadinha - Encontros consonantais.
 
A experiência do professor. Publicado EM 08.07.2024
A experiência do professor. Publicado EM 08.07.2024A experiência do professor. Publicado EM 08.07.2024
A experiência do professor. Publicado EM 08.07.2024
 
Relatório de Atividades 2017 CENSIPAM.pdf
Relatório de Atividades 2017 CENSIPAM.pdfRelatório de Atividades 2017 CENSIPAM.pdf
Relatório de Atividades 2017 CENSIPAM.pdf
 
Painel para comemerorar odia dos avós grátis.pdf
Painel  para comemerorar odia dos avós grátis.pdfPainel  para comemerorar odia dos avós grátis.pdf
Painel para comemerorar odia dos avós grátis.pdf
 
RECORDANDO BONS MOMENTOS! _
RECORDANDO BONS MOMENTOS!               _RECORDANDO BONS MOMENTOS!               _
RECORDANDO BONS MOMENTOS! _
 
A perspectiva colaborativa e as novas práticas de inclusão. (1).pptx
A perspectiva colaborativa e as novas práticas de inclusão. (1).pptxA perspectiva colaborativa e as novas práticas de inclusão. (1).pptx
A perspectiva colaborativa e as novas práticas de inclusão. (1).pptx
 
Oficina de bases de dados - Dimensions.pdf
Oficina de bases de dados - Dimensions.pdfOficina de bases de dados - Dimensions.pdf
Oficina de bases de dados - Dimensions.pdf
 
FOTOS_AS CIÊNCIAS EM AÇÃO .
FOTOS_AS CIÊNCIAS EM AÇÃO                .FOTOS_AS CIÊNCIAS EM AÇÃO                .
FOTOS_AS CIÊNCIAS EM AÇÃO .
 

Introdução à Programacao em Processing

  • 1. IntroduçãoàProgramaçãoem ProcessingPrograma de DoutoramentoemCiência e Tecnologiadas Artes – Arte InteractivaJorge C. S. Cardosohttp://jorgecardoso.eu19 Fevereiro 2011
  • 2. 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
  • 3. HardwareProcessadorCPU (Central Processing Unit)Éa parte de um sistema de computadorqueexecuta as instruções de um programa de computador
  • 4. 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
  • 5. HardwareMemóriapersistenteNãovolátil (mantémos dados mesmosemalimentaçãoeléctrica)ExemplosDisco duroMemória Flash (cartões SD, Flash pen, …)OsprogramassãoarmazenadosnestamemóriaQuandoosexecutamospassampara a RAM
  • 6. 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? 
  • 7. 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
  • 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 linguagensAs linguagens de programação foram evoluindo para sintaxes mais próximas da linguagem natural
  • 11. 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. */}
  • 12. CódigoMáquina.codemain procmovax,seg messagemovds,axmov ah,09lea dx,messageint 21hmov ax,4c00hint 21hmain endpend mainInstruçõesexecutadasdirectamentepeloprocessador
  • 13. 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
  • 17. Combinaosdiferentesmódulos de códigomáquina (i.e. previamentecompilados) e gera o ficheiro final queiráserexecutadopela CPU
  • 18. Permite o uso de 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áquina resultante é chamado "bytecode“
  • 21. Em Java não existe necessidade de "linkagem"
  • 22. Uma aplicação Java consiste num conjunto destes ficheiros (e não apenas um)
  • 23. 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)
  • 24. Este processador virtual é implementado através de software em qualquer computador
  • 25. Para correr um programa 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çãoNa descrição de um programaéessencialdefinir:Ponto de entrada. Qual a primeirainstrução a executar?Sequência: comoavanço de instruçãoeminstrução?
  • 29. Permite a criação de programasquepodemserexecutadosemváriasplataformassemmodificação
  • 32. 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
  • 33. 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
  • 34. 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/)
  • 36. 19-02-2011Jorge Cardoso22Processing - eixos da janela gráfica
  • 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);
  • 41. 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;}
  • 42. 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;
  • 43. 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';
  • 44. 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;
  • 45. 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.
  • 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 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
  • 48. 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...
  • 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çã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. 
  • 51. As chavetas{ }delimitam as acçõesexecutadascondicionalmente. if ([condição]) {     [acções] }
  • 52. 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;}
  • 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 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;    
  • 55. Condições ifAlgumasvariantes da estrutura if:If... Else... If... Else if... If... Else if... Else...Switch
  • 56. 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...}
  • 57. 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>}
  • 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: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!
  • 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 conjunto de instruçõesrepetidamenteExistemduas classes de ciclos:Ciclosqueexecutam um númeropré-determinado de vezes: forCiclosqueexecutamenquantoumacondiçãoéverdadeira: do e while
  • 64. 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); }
  • 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 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;}
  • 67. 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);
  • 68. 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
  • 69. 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;}
  • 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çã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];
  • 72. Arrays - Declaração e InicializaçãoDeclarar e inicializarnumsópasso intidade[] = {23, 47, 11, 92, 76};
  • 73. Arrays - índicesIndiceéumaexpressão do tipointeiroLiteralidade[1]Variávelidade[i]Expressãocomplexaidade[2*i+n]Podeserusadoparapercorrer um arrayatravés de um ciclo for, while, ...
  • 74. 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]);}
  • 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çã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.
  • 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 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();
  • 79. 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);
  • 80. 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);}
  • 81. 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
  • 82. 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; }
  • 83. 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
  • 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á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
  • 86. 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)
  • 87. 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;}
  • 89. Objectos no mundo realObjectos no mundo real podemserdescritosatravés de duascaracterísticasessenciais: atributose comportamento. Porexemplo, o cão do João tem:  atributos:
  • 96. corre
  • 97. ladra
  • 99. come
  • 100. dormeObjectos no mundo realOutro exemplo: o automóvel do Jorge Atributos:
  • 109. travar(O comportamento não se refere necessariamente a comportamento autónomo, mas simplesmente a acções que o objecto pode realizar.)
  • 110. Classes no mundo realOs 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).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)A este conjunto genérico de comportamentos e atributos dá-se o nome de classe.
  • 111. Classes em OOPUma classe é, basicamente, um molde para a criação de objectos. 
  • 112. Os atributos são representados através de variáveis e o comportamento através de métodos.
  • 113. Em OOP, ao processo de criar um objecto a partir de uma classe dá-se o nome de instanciação.
  • 114. Usando o exemplo anterior, o objecto "Automóvel do Jorge" seria uma instância da classe "Automóvel".http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-winter
  • 115. Classes em OOPA classepassa a sermais um tipo de dados
  • 118. Para acedermosàsvariáveisoumétodos do objectousamos a notaçãoponto (.):MinhaClasse v, v1;v = new MinhaClasse();v1 = null;v.nomePropriedade;v.nomeMetodo();v1.nomePropriedade; // erro
  • 119. Um exemplo concreto: Classe PolígonoAtributos:- ?Fase de desenhoCriar uma classe
  • 121. Que propriedades são necessárias/vou precisar para a classe?
  • 122. Que acções deve ela implementar?Comportamento:- ?
  • 123. Um exemplo concreto: Classe PolígonoAtributos:Pontos
  • 127. Área
  • 128. Bounding boxFase de desenhoCriar uma classe
  • 130. Que propriedades são necessárias/vou precisar para a classe?
  • 131. Que acções deve ela implementar?Comportamento:desenhar-se
  • 132. Rodar
  • 134. transladarImplementaçãoinicial: Exemplo 10class Poligono {int x[] = {10, 50, 25};int y[] = {10, 10, 25}; public void desenha() {beginShape(); for (inti = 0; i < x.length; i++) { vertex(x[i], y[i]); }endShape(CLOSE); }}
  • 135. Alguma sintaxeclass NomeClasse {//declaração de variáveis (propriedades) //implementação de métodos // metodosprivadosapenaspodemserinvocadosporcodigodentro // da propriaclasse private void metodoPrivado() { } //metodospúblicospodemserinvocadosporcodigo exterior àclasse public void metodoPublico() { }}
  • 137. EncapsulamentoUma das vantagens da programação orientada a objectos é a de permitir o encapsulamento dos dados/comportamento:
  • 138.  Por um lado, permite agrupar numa unidade lógica dados associados a um determinado conceito e operações sobre esses dados.
  • 139.  Por outro lado, permite "esconder" informação do exterior, prevenindo erros e estados inconsistentes. 
  • 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)EncapsulamentoEstas 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. 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. (Sem objectos teríamos programas em que o estado e comportamento de diferentes componentes estariam todos misturados).Encapsulamento em Java A linguagem Java não força o encapsulamento na perspectiva do "esconder" a informação do exterior
  • 144. Os atributos podem ser declarados como vísiveis do exterior (access modifier)
  • 146. Ou podem ser declarados como visíveis apenas pela classe
  • 148. Tal comoestá a nossaclassepoderiamosfazer: p = new Poligono();p.x = expand(p.x, p.x.length+1);p.x[p.x.length-1] = 25;p.y = expand(p.y, p.y.length+1);p.y[p.y.length-1] = 15;Exemplo_11
  • 149. Encapsulamento: exemplo Se me enganar, o código da classepodedeixar de funcionar: p = new Poligono();p.x = expand(p.x, p.x.length+1);p.x[p.x.length-1] = 25;p.y = expand(p.y, p.y.length);p.y[p.y.length] = 15;Exemplo_12Acederdirectamenteàspropriedadesquebra o encapsulamento da classe. O objectodeixa de tercontrolosobre as suasprópriaspropriedades.Para além disso, énecessárioconhecer o funcionamentointerno da classe (nome e tipo das variáveis)
  • 150. Encapsulamento: exemplo Para manter o encapsulamento:class Poligono { private int x[] = { 10, 50, 25 }; private int y[] = { 10, 10, 25 }; public void desenha() {… } public void addPoint(int x, int y) {p.x = expand(p.x, p.x.length+1);p.x[p.x.length-1] = x;p.y = expand(p.y, p.y.length+1);p.y[p.y.length-1] = y; }}Exemplo_13ConstrutoresMuitas 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. Por isso, quando um objecto é criado, é invocado um método especial chamado construtor. Construtores em Java Em Java, o construtoré um método com o mesmonome da classe, mas semtipo de retorno.
  • 152.  
  • 153. É o nome do construtor (e parâmetros) quecolocamos a seguirà keyword 'new' quandocriamos um objecto.
  • 154. Exemplo_14Construtores em Java  Uma classepodedefinirváriosconstrutores com parâmetrosdiferentes (número e/outipo).
  • 155. Normalmente, define-se um construtorgeralqueaceitatodososparâmetrospossíveis e outros mais simples, queusamalgunsvaloresporomissão.Para poupartrabalho, define-se primeiro o construtorgeralOs outros podeminvocar o geral com valorespré-definidosExemplo_15DestrutoresUm destrutor é o oposto de um construtor: é um método especial invocado quando o objecto é destruído. 
  • 156. O destrutor é usado para dar oportunidade ao objecto de libertar recursos (por exemplo memória).
  • 157. Em Java não existem destrutores porque a gestão de memória é feita automaticamente pelo garbage collector.
  • 158. Existe um método que é invocado antes de o objecto ser recolhido pelo garbage colector mas raramente se usa.HerançaEm muitos casos existe uma relação entre classes diferentes num programa. 
  • 159. Voltando aos veículos, o nosso programa poderia necessitar de trabalhar com bicicletas e automóveis.
  • 160. Apesar de ambos serem veículos, uma parte do estado e alguns comportamentos são completamente diferentes.HerançaNestes casos, faz mais sentido modelar três classes: Automóvel e Bicicleta como classes derivadas da classe Veículo. 
  • 161. Desta forma, evita-se repetir o estado e comportamento partilhados.
  • 162. Nesta situação, as classes Automóvel e Bicicleta, herdam o estado e comportamento de Veículo, podendo estendê-los.
  • 163. A classe Veículo é a superclasse e as classes Automóvel e Bicicleta as subclasses.HerançaAs subclasses herdam todos os atributos e métodos da superclasse, excepto os construtores.
  • 164. O construtor da subclasse deve invocar o construtor da superclasse 
  • 165. (se a superclasse tiver um construtor vazio - sem parâmetros, este é invocado automaticamente).
  • 166. Para invocarmos o construtor da classe mãe usa-se a instrução 
  • 169. Method OverridingMethod 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. 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"). Method overridingMethod overriding permite à classe Bicicleta re-implementar um método da classe Veículo.A classe Automóvel, como não re-implementa o método buzinar(), usa a implementação de Veículo ("horn").
  • 171. Method overriding em JavaNo casodaclasseRectangulo, épossívelcalcularoperímetro de forma maisrápida do que a implementação do Polígono…Exemplo_17
  • 172. Relação is-a (é um)A herança permite definir relações do tipo “é um” entre classes: Um Rectangulo é um Poligono Um PoligonoRegular é um PoligonoIsto significa que tanto um Rectangulo como um PoligonoRegular podem ser tratados no código como se fossem do tipo Poligono
  • 173. Relação is-a (é um)Exemplo_18Nesteexemploinvocamos “desenha()” emtodososobjectoscomo se fossemtodosPoligono. Nestecasotodas as classes herdam a mesmaimplementação de “desenha()” daclassemãe.O queaconteceria se invocassemos “perimetro()” damesma forma? “perimetro()” tem umaimplementaçãodiferenteemRectanguloExemplo_19
  • 174. PolimorfismoDois tipos de polimorfismo: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.Overriding: possibilidade de definir implementações mais concretas de um método numa subclasse. Por omissão, é a implementação mais concreta que é invocada.
  • 175. ProgramaçãoemProcessingFimhttp://slideshare.net/jorgecardoso (tag: ea-phd-ia-2011)Exemplos: http://dl.dropbox.com/u/1460217/UCP/2011-PhD-AI-Processing/src.zip