Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
João Vitor Squillace Teixeira ============== REVISÃO para a PROVA ============= 1) Passagem parâmetro por nome: void sub (int a){. b=a; //b recebe o valor do vet[a] i=3; c=a; //c vai receber um valor diferente do que b, no caso ele recebe vet[3] .} sub(vet[i]); 2) Passagem parâmetro por resultado: void sub(out int a){ //nao copio x para cá a=3; } sub(x); printf(“x é: &d ”,x); //x no caso será impresso 3 pois foi o retorno,o valor está voltando. //em toda linguagem tem passagem por resultado, mas dificilmente aparece. São efeitos indesejáveis: - Colisão de parâmetros +importante - Parâmetro tem que estar associado com o left – importante Procedure P(procedure Q(a:real),b:real) Begin Q(2*b) End; Procedure R(x:real) Begin …. End; P(R,n); João Vitor Squillace Teixeira Exemplo de vinculação de parâmetros por nome (palavra chave) void AbrirJanela(string titulo,posição p,tamanho t){ } ... AbrirJanela (p=x,t=(640,480),titulo=”Alo Mundo”); TAD: coisas obrigatórias Ocultação de dados (public, private) //alguma outra coisa elemento sintático com legenda. Encapsulamento (precisa ter um elemento sintático, alguma coisa juntando os dados e as instruções subprogramas) +++++++++++++++++++++++ Java ++++++++++++++++++++++++++++ Class Casa{ //teoricamente indica o encapsulamento mas tem que ter subprograma Public string endereço; Public string proprietário; } //NÃO TEM ENCAPSULAMENTO POR QUE SÓ TEM DADOS E NÃO TEM SUBPROGRAMAS!!! +++++++++++++++++++++++ Java ++++++++++++++++++++++++++++ Class Casa{ //teoricamente indica o encapsulamento mas tem que ter subprograma Public string endereço; Public string proprietário; Public float Calcular IPTU(); } //tem um encapsulamento mas não tem nada escondido. Mas só esconde aquilo que tem problema de consistência, se você falar que não é tipo de dados por que não tem ocultação de dados pois está tudo publico está certo! João Vitor Squillace Teixeira Subprogramas Sobrecarregados void calcula (int a,int b){ } void calcula (char a,char b){ } void calcula (flat a,float b){ } main(){ int a =10;b=5; calcula (a,b); } A linguagem possui compatibilidade de tipos A linguagem possui conversões automáticas //em C++ isso é um erro (não é subprograma sobrecarregado!!!!) pois tem compatibilidade e conversão automática, ele pode se confundir com o calcula (int a,intb) e calcula(float a,float b); void calcula (int a,int b){ } int calcula (funcionario a,funcionario b){ } main(){ int a =10;b=5; calcula (a,b); }//esse é um exemplo de subprograma sobrecarregado! Declarar de alguma forma uma função que não especifica o tipo no polimorfismo paramétrico. Toda hora que se referir ao tipo, será aquele tipo. Polimorfismo paramétrico só existe na vinculação estática (linguagens). João Vitor Squillace Teixeira int calcula (tipo f){ tipo x; return x; } //só consegue ver isso na hora que o código é gerado pelo compilador, vimos em Ada, em C++ (ele vê que está usando e cria o código automaticamente) e vimos também em haskel ( ele define o tipo em... ) Polimorfismo Parametrico em Haskell Em C++ Template <class Tipo> Tipo soma(Tipo a,Tipo b){ return a+b; } soma (1.0,2.3); // Em c++ isso seria um problema, ele ficaria confuso pois se você der um char ele não saberia somar, ele no caso concatenaria. Em Haskell soma:: Num t => t → t → t soma a b=a+b; //Não existem problemas de poliformismo paramétrico em haskel. No caso o num já indica que o valor seria em numérico. Compilação separada e compilação independente Na compilação separada o programa não é um arquivo, ele é um monte de subprogramas separados e compilados em tempos diferentes. A compilação é feita dos programas é feita por partes e não tudo de uma vez. Na compilação separada precisa ter as informações das outras partes, Linguagem com compilação independente abre mão das verificações de tipos. _ João Vitor Squillace Teixeira Namespaces são agrupamentos lógicos de elementos, sejam eles classes ou mesmo outros namespaces, dentre outras tem como funcionalidade evitar conflito de nomes. Dois bons motivos para se utilizar da manipulações de exceções: Propagação de erros automático (ele busca o tratamento de erros nas funções anteriores, e depois de percorrê-las todas novamente se ainda e se não achar o tratamento ai sim ele indica erro, se não ele o trata). Facilidade no tratamento (legibilidade) pois a estrutura limpa fica em uma parte separada das com erro.