Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

28
Modelos de Modelos de Linguagem de Linguagem de Programação I Programação I Aula 06 Aula 06 Prof. Silvestri www.eduardosilvestri.com .br

Transcript of Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Page 1: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Modelos de Modelos de Linguagem de Linguagem de Programação IProgramação I

Aula 06Aula 06

Modelos de Modelos de Linguagem de Linguagem de Programação IProgramação I

Aula 06Aula 06

Prof. Silvestriwww.eduardosilvestri.com.br

Page 2: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de DadosTipos de Dados

Em ciência da computação tipos de variáveis ou dados é uma Em ciência da computação tipos de variáveis ou dados é uma combinação de valores e de operações que uma combinação de valores e de operações que uma variávelvariável pode pode executar, o que pode variar conforme o executar, o que pode variar conforme o sistema operacionalsistema operacional e a e a linguagem de computadorlinguagem de computador. São utilizados para indicar ao . São utilizados para indicar ao compilador ou interpretadorcompilador ou interpretador as conversões necessárias para as conversões necessárias para obter os valores em obter os valores em memóriamemória durante a construção do programa. durante a construção do programa. Por outro lado, ajudam também o programador a detectar Por outro lado, ajudam também o programador a detectar eventuais erros (sintáticos).eventuais erros (sintáticos).

Page 3: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de DadosTipos de Dados

Dependendo da Dependendo da linguagem de programaçãolinguagem de programação, o tipo de um dado é , o tipo de um dado é verificado diferentemente, de acordo com a verificado diferentemente, de acordo com a análise léxica, análise léxica, sintática e semânticasintática e semântica do compilador ou interpretador da do compilador ou interpretador da linguagem. Os tipos têm geralmente associações com valores na linguagem. Os tipos têm geralmente associações com valores na memória ou com memória ou com objetosobjetos (para uma linguagem orientada a (para uma linguagem orientada a objeto) ou variáveis.objeto) ou variáveis.

Page 4: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Estáticos ou DinâmicosEstáticos ou DinâmicosA verificação do tipo de um dado é feita de forma estática em A verificação do tipo de um dado é feita de forma estática em

tempo de compilaçãotempo de compilação ou de forma dinâmica em ou de forma dinâmica em tempo de tempo de execuçãoexecução. Em . Em C, C++, Java e HaskellC, C++, Java e Haskell os tipos são estáticos, em os tipos são estáticos, em Scheme, Lisp, Smalltalk, Perl, PHP, Visual Basic, Ruby e Scheme, Lisp, Smalltalk, Perl, PHP, Visual Basic, Ruby e PythonPython são dinâmicos. são dinâmicos.

Em C uma definição estática do tipo de uma variáveis ficaria Em C uma definição estática do tipo de uma variáveis ficaria assim:assim:

printf("O tipo char ocupa %d bytes\n", sizeof(char));printf("O tipo char ocupa %d bytes\n", sizeof(char));

Page 5: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Estáticos ou DinâmicosEstáticos ou DinâmicosEm Em Linguagem PythonLinguagem Python a definição dinâmica do tipo de dado é a definição dinâmica do tipo de dado é

feita em tempo de execução, por exemplo:feita em tempo de execução, por exemplo:

Variável de tipo "inteiro": Variável de tipo "inteiro": >>> a = 123 >>> a = 123 >>> type(a) >>> type(a) <type 'int'> <type 'int'>

E logo a mudança de estado para tipo string: E logo a mudança de estado para tipo string: >>> a = 'teste' >>> a = 'teste' >>> type(a) >>> type(a) <type 'str'> <type 'str'> >>>>>>

Page 6: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Forte e FracoForte e FracoLinguagens implementadas com tipos de dados fortes, tais como Linguagens implementadas com tipos de dados fortes, tais como

Java e Python, exigem que o tipo de dado de um valor seja do Java e Python, exigem que o tipo de dado de um valor seja do mesmo tipo da variável ao qual este valor será atribuído. mesmo tipo da variável ao qual este valor será atribuído.

Exemplo:Exemplo:

Page 7: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Forte e FracoForte e Fraco(Sintaxe genérica) (Sintaxe genérica) 1. Declarar Variáveis 1. Declarar Variáveis 2. 2. TEXTO nome TEXTO nome 3. 3. INTEIRO idade INTEIRO idade 4. 4. 5. Atribuições 5. Atribuições 6. 6. nome = "Fulano" nome = "Fulano" 7.7. idade = "13"idade = "13"

Ocorrerá um erro ao Ocorrerá um erro ao compilarcompilar a linha 7, pois o valor "13" precisa a linha 7, pois o valor "13" precisa ser convertido para o tipo de dado INTEIRO. ser convertido para o tipo de dado INTEIRO.

Page 8: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Forte e FracoForte e FracoEm linguagens com tipos de dados fracos, tais como Em linguagens com tipos de dados fracos, tais como PHP e PHP e

VBScriptVBScript, a conversão não se faz necessária, sendo realizada , a conversão não se faz necessária, sendo realizada implicitamente pelo compilador ou interpretador.implicitamente pelo compilador ou interpretador.

Page 9: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Primitivo e CompostoPrimitivo e CompostoUm tipo primitivo (também conhecido por nativo ou básico) é Um tipo primitivo (também conhecido por nativo ou básico) é

fornecido por uma fornecido por uma linguagem de programaçãolinguagem de programação como um bloco como um bloco de construção básico. Dependendo da implementação da de construção básico. Dependendo da implementação da linguagem, os tipos primitivos podem ou não possuir linguagem, os tipos primitivos podem ou não possuir correpondência direta com objetos na correpondência direta com objetos na memóriamemória..

Um tipo composto pode ser construído em uma linguagem de Um tipo composto pode ser construído em uma linguagem de programação a partir de tipos primitivos e de outros tipos programação a partir de tipos primitivos e de outros tipos compostos, em um processo chamado composição.compostos, em um processo chamado composição.

Em Em C, cadeias de caracteresC, cadeias de caracteres são tipos compostos, enquanto em são tipos compostos, enquanto em dialetos modernos de dialetos modernos de Basic e em JavaScriptBasic e em JavaScript esse tipo é nativo esse tipo é nativo da linguagem.da linguagem.

Page 10: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Primitivo e CompostoPrimitivo e CompostoTipos primitivos típicos incluem Tipos primitivos típicos incluem caracter, inteirocaracter, inteiro (representa um (representa um

sub-conjunto dos sub-conjunto dos números inteirosnúmeros inteiros, com largura dependente do , com largura dependente do sistema; pode possuir sinal ou não), sistema; pode possuir sinal ou não), ponto flutuanteponto flutuante (representa (representa o conjunto dos o conjunto dos números reaisnúmeros reais), ), booleano (lógica booleanabooleano (lógica booleana, , verdadeiro ou falso) e algum tipo de verdadeiro ou falso) e algum tipo de referênciareferência (como (como ponteiroponteiro ou ou handleshandles).).

Tipos primitivos mais sofisticados incluem Tipos primitivos mais sofisticados incluem tuplas, listas ligadas, tuplas, listas ligadas, números complexos, números racionais e tabela hashnúmeros complexos, números racionais e tabela hash, presente , presente sobretudo em sobretudo em linguagens funcionaislinguagens funcionais..

Page 11: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Primitivo e CompostoPrimitivo e CompostoEspera-se que operações envolvendo tipos primitivos sejam as Espera-se que operações envolvendo tipos primitivos sejam as

construções mais rápidas da linguagem. Por exemplo, a adição construções mais rápidas da linguagem. Por exemplo, a adição de inteiros pode ser feita com somente uma de inteiros pode ser feita com somente uma instruçãoinstrução de de máquina, e mesmo algumas máquina, e mesmo algumas CPUsCPUs oferecem instruções oferecem instruções específicas para processar sequências de caracteres com uma específicas para processar sequências de caracteres com uma única instrução. A maioria das linguagens não permite que o única instrução. A maioria das linguagens não permite que o comportamento de um tipo nativo seja modificado por comportamento de um tipo nativo seja modificado por programas. como exceção, programas. como exceção, SmalltalkSmalltalk permite que tipos nativos permite que tipos nativos sejam estendidos, adicionando-se operações e também sejam estendidos, adicionando-se operações e também redefinindo operações nativas.redefinindo operações nativas.

Page 12: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Primitivo e CompostoPrimitivo e CompostoUma estrutura em Uma estrutura em C e C++C e C++ é um tipo composto de um conjunto é um tipo composto de um conjunto

determinado de campos e membros. O tamanho total da determinado de campos e membros. O tamanho total da estrutura para o tipo composto corresponde a soma dos estrutura para o tipo composto corresponde a soma dos requerimentos de cada campo da estrutura, além de um possível requerimentos de cada campo da estrutura, além de um possível espaço para alinhamento de espaço para alinhamento de bitsbits. Por exemplo:. Por exemplo:

struct Conta struct Conta { { int numero; int numero; char *nome; char *nome; char *sobrenome; char *sobrenome; float balanco; float balanco; };};

Page 13: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Primitivo e CompostoPrimitivo e Compostostruct Contastruct Conta define um tipo composto chamado Conta. A partir de define um tipo composto chamado Conta. A partir de

uma variável minhaConta do tipo acima, pode-se acessar o uma variável minhaConta do tipo acima, pode-se acessar o número da conta através de minhaConta.numero.número da conta através de minhaConta.numero.

Conta Conta minhaConta;minhaConta;

Page 14: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Strings de CaracteresStrings de CaracteresEm programação e em linguagens formais, uma cadeia de Em programação e em linguagens formais, uma cadeia de

caracteres (também conhecida como string) é uma sequência caracteres (também conhecida como string) é uma sequência ordenada de ordenada de caracterescaracteres (símbolos) escolhidos a partir de um (símbolos) escolhidos a partir de um conjuntoconjunto pré-determinado. Em programação, cada símbolo pré-determinado. Em programação, cada símbolo armazenado na memória é representado por um valor numérico. armazenado na memória é representado por um valor numérico. Uma Uma variávelvariável declarada com declarada com tipo de dadotipo de dado cadeia geralmente cadeia geralmente armazena um número pré-determinado de caracteres.armazena um número pré-determinado de caracteres.

Page 15: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados

Strings de Caracteres – Teoria Strings de Caracteres – Teoria FormalFormalSeja Σ um Seja Σ um alfabetoalfabeto, um conjunto finito e não vazio. Os elementos , um conjunto finito e não vazio. Os elementos

de Σ são chamados caracteres. Uma cadeia sobre Σ é qualquer de Σ são chamados caracteres. Uma cadeia sobre Σ é qualquer sequência finita de caracteres de Σ. Por exemplo, se Σ = {0, 1}, sequência finita de caracteres de Σ. Por exemplo, se Σ = {0, 1}, então então 01010101 é uma cadeia sobre Σ. O tamanho da cadeia é a é uma cadeia sobre Σ. O tamanho da cadeia é a quantidade de caracteres, e pode ser qualquer valor inteiro não quantidade de caracteres, e pode ser qualquer valor inteiro não negativo. A cadeia vazia é uma cadeia única sobre Σ de negativo. A cadeia vazia é uma cadeia única sobre Σ de tamanho 0, sendo denotada por tamanho 0, sendo denotada por εε ou ou λλ..

Page 16: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados Strings de Caracteres – Concatenação e Sub Strings de Caracteres – Concatenação e Sub Cadeias.Cadeias.

ConcatenaçãoConcatenação é uma importante operação binária em Σ*. Para é uma importante operação binária em Σ*. Para qualquer duas cadeias qualquer duas cadeias ss e e tt em Σ*, sua concatenação é definida em Σ*, sua concatenação é definida pela sequência de caracteres de pela sequência de caracteres de ss seguida pela sequência de seguida pela sequência de caracteres em caracteres em tt, denotada por , denotada por stst. Por exemplo se Σ = {a, b, …, . Por exemplo se Σ = {a, b, …, z}, z}, ss = bear e = bear e tt = hug, então = hug, então stst = bearhug e = bearhug e tsts = hugbear. = hugbear.

A concatenação de cadeias é uma operação associativa, mas não A concatenação de cadeias é uma operação associativa, mas não comutativa. A cadeia vazia serve como um elemento comutativa. A cadeia vazia serve como um elemento identidade; par qualquer cadeia s, εs = sε = s. Portanto, o identidade; par qualquer cadeia s, εs = sε = s. Portanto, o conjunto Σ* e a operação de concatenação formam um conjunto Σ* e a operação de concatenação formam um monóidemonóide..

A cadeia s é dita uma sub-cadeia (ou fator) de t se existem cadeias A cadeia s é dita uma sub-cadeia (ou fator) de t se existem cadeias (possivelmente vazias) u e v de forma que t = usv.(possivelmente vazias) u e v de forma que t = usv.

Page 17: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados Strings de Caracteres – Tipo de Dados.Strings de Caracteres – Tipo de Dados.

Um tipo de dado cadeia de caracteres (referido em programação geralmente como string) é uma modelagem de uma cadeia formal de caracteres. São bastante usados em programação, sendo implementados em quase todas as linguagens de programação. Em algumas linguagens esse tipo é definido nativamente, em outras é um tipo composto, derivado.

Page 18: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados ArraysArrays

Em programação de computadores, um array, também conhecido como vetor ou lista (para arrays uni-dimensionais) ou matriz (para arrays bi-dimensionais), é uma das mais simples estruturas de dados. Os arrays mantêm uma série de elementos de dados, geralmente do mesmo tamanho e tipo de dados. Elementos individuais são acessados por sua posição no array. A posição é dada por um índice, também chamado de subscrição.

Page 19: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados ArraysArrays

O índice geralmente utiliza uma seqüência de números inteiros, (ao contrário de um array associativo) mas o índex pode ter qualquer valor ordinal. Alguns arrays são multi-dimensionais, significando que eles são indexados por um número fixo de números inteiros, por exemplo, por um seqüência (ou sucessão) finita de quatro números inteiros. Geralmente, arrays uni- e bi-dimensionais são os mais comuns.

Page 20: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados ArraysArrays

Os arrays podem-se considerar como as estruturas de dado mais simples que é possível imaginar. Têm a vantagem de que os seus elementos são acessíveis de forma rápida, mas têm uma notável limitação: são de tamanho fixo, não podem ser incrementados ou diminuídos sem implicar complexos processos de cópia.

Estas estruturas de dado são ajeitadas nas situações em que o acesso aos dados seja realizado de forma aleatória e imprevisível. Porém, se os elementos podem estar ordenados e vai-se empregar um acesso seqüencial, seria mais ajeitada uma lista.

Page 21: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados Arrays – Forma de Acesso.Arrays – Forma de Acesso.

A forma de acesso aos elementos de um array é direta, ao contrário das listas. Isto quer dizer que o elemento desejado obtêm-se a partir do seu índice e não é preciso procurá-lo elemento por elemento. No caso das listas, por exemplo, para alcançar o terceiro elemento ter-se-á de acessar primeiro aos dois anteriores (ou bem de guardar um ponteiro que permita acessar de maneira rápida a esse elemento em particular).

Page 22: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados Arrays – declarando e alocando um array.Arrays – declarando e alocando um array.

Em Java, os arrays são objetos que necessitam ser inicializados. Isto geralmente é feito usando o operador new. Para um array, o programador especifica o tipo dos elementos do array e o número de elementos como parte da operação new. Ex.: int[] A = new int[5].

String[] S = new String[5]; double[] d = new double[10]; int[][] d2 = new int[10][10]; // matriz 10x10 , array de arrays

double[] a; a = new double[100];

Page 23: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados Arrays – declarando e alocando um array.Arrays – declarando e alocando um array.

Em C, os arrays são declarados, defenindo primeiro o seu tipo, em seguida do seu nome e por fim a sua dimensão. Ex.: int array[10];.

int quadro[10]; double array[100]; int matrix[20][10]; /* matriz 20x10 */

Page 24: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados Arrays – declarando e alocando um array.Arrays – declarando e alocando um array.

Inicializando arrays no momento da criação

int[] A = {5, 7, 9, 2, 0}; int[][] d2 = { {1,2,3} , {4,5,6} }; long[] a; a = new long[] {10,20,30,40};

Page 25: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

Tipos de Dados Tipos de Dados Arrays – declarando e alocando um array.Arrays – declarando e alocando um array.

Automaticamente o Java inicializa com um valor default cada elemento do array:

Null para tipo Objetos; 0 (zero) para short, byte, int, long, float e double; Unicode 0 para char; False para boolean; Em C, os arrays quando inicializados no momento da declaração,

são definidos do seguinte modo:int array[5] = {3,4,5,6,3}; double quadro[5] = {3.0,4.0,5.0,6.03,3.0}; int matrix[4][4] = {{3,4,3,4},{5,6,2,3}};

Page 26: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

www.eduardosilvestri.com.brwww.eduardosilvestri.com.br

Eduardo SilvestriEduardo [email protected]@eduardosilvestri.com.br

DúvidasDúvidas

Page 27: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

QuestõesQuestões

Page 28: Modelos de Linguagem de Programação I Aula 06 Prof. Silvestri .

1.1. Fazer o mapa conceitual da aula.Fazer o mapa conceitual da aula.

PublicaçãoPublicação