Please enable JavaScript.
Coggle requires JavaScript to display documents.
Conceitos de Linguagem de Programação (Tipos de Dados (Arrays associativos…
Conceitos de Linguagem de Programação
Tipos de Dados
Arrays associativos
Tipo tupla
Tipos Arrays
Tipo lista
Tipos Enumerados
Tipo registro
Tipos cadeia de caracters
Tipo união
Tipos primitivos de Dados
Ponteiros e tipos referência
Nomes, Vinculação, e Escopos
Conceito de Vinculação (binding)
Tipo Binding
Estático
Declaração explícita
int a;
Declaração implícita
inferência de tipo
var a = 1.2
func(a)
Dinâmico
utiliza interpretadores puros
vantagens
flexibilidade de programação
desvantagens
custo elevado
diminuição de capacidade de detecção de erro
Vinculação de Armazenamento
Alocação
Desalocação
Tempo de vida
Variáveis
Dinâmicas na pilha
Dinâmicas no monte explícitas
Estática
vantangens
armazenamento direto
desvantagens
redução da flexibilidade
armazenamento não compartilhado
Dinâmicas no monte implícitas
Escopo
Variáveis
Escopo e Tempo de vida
Nomes
Expressões
Expressões Arimétricas
os operadores podem ser
ternário
unário
binário
podem ser
infixo
posfixo
sobrecarregados
possuí mais de um propósito
consistem de
operadores
operandos
parenteses
chamada de funções
Ordem de avaliação de operadores
Precedência
operador identidade
Segue a mesma da matemática
Associatividade
regra esquerda para direita
regra direita para esquerda
adição não é associativa, quando há overflow
Parênteses
altera as regras de precedência e de associativade
Expressões condicionais
a = (b > c) ? 0 : b/2;
Expressões em Ruby
operadores como métodos
ordem de avaliação de operandos
Efeitos colaterais funcionais
podem ser evitados
probindo efeitos colaterais funcionais
garantindo que operandos sejam avaliados em uma ordem específica
Em java operandos são avaliados da esquerda para a direita
Transparência referencial
Ocorre quando duas expressões quaisquer com o mesmo valor são substituídas uma pela outra no programa e não ocorre nenhum efeito colateral
Possui semântica fácil de entender
Têm equivalência a uma função matemática
Podem ter
Expressões de modo misto
Operador com operandos de tipos diferentes
Erros em expressões
overflow
divisão por 0
underflow
Coerção
conversão de tipo implícita
de estritamento
de float para int
de alagamento
de int para float
Conversão de tipo explícita
str(123)
(int) num
Expressões Relacionais
define operações
simples
comparação de inteiros
complexa
comparação de string
Precedência mais baixa que operadores aritméticos
Expressões Booleanas
consistem de
expressões relacionais
operadores booleanos
constantes booleanas
variáveis booleanas
Avaliação em Curto-Circuito de uma expressão
Resultado é determinado sem avaliar todos os operandos e/ou operadores
Sentenças de Atribuição
Atribuição Simples
a = 1
a := 1
Alvos Condicionais
($flag ? $count1 : $count2) = 0;
Operadores de atribuição compostos
a += b;
Operadores de atribuição unários
cont ++;
sum = ++ cont;
sum = cont ++;
Atribuição como uma expressão
while ((ch = getchar()) != EOF) { ... }
Atribuição de múltiplos alvos
($first, $second, $third) = (20, 40, 60);
Atribuição de modo misto
s = "1" + 1;
Estruturas de Controle em Sentenças
Sentença de Seleção
De dois caminhos
contém
Expressão de controle
expressões aritméticas
expressões booleanas
Forma da cláusula
then..else
chaves {}
indentação (python)
Seletores Aninhados
Dificuldade de encontrar uma cláusula senão
Seleção Múltipla
Questões de Projeto
Qual é a forma e o tipo da expressão que controla a seleção?
Como são especificados os segmentos selecionárveis
O fluxo de execução por meio da estrutura pode incluir apenas um segmento selecionável?
Como os valores de cada caso são especificados?
Como valores da expressão de seleção que não estão representados devem ser manipulados, se é que o devem?
Exemplos
switch (expr) ...case...default
case <expr> ... when <expr> then <expr>...else.. end
desvio de n caminhos
Sentença de Iteração
Construção de iteração
corpo
pós-teste
pré-teste
Laço controlado por contador
for (int i =0; <expr_bool>; i+=2) {...}
Questões de Projeto
Deve ser legal para a variável ou para os parâmetros de laço serem modificados no laço? E, se sim, essa mudança afeta o controle do laço?
Os parâmetros de laço devem ser avaliados apenas uma vez ou uma vez para cada iteração?
Qual é o tipo e o escopo da variável de laço?
Laço controlador logicamente
while(<expr_bool>) {...}
pre-teste
Questões de Projeto
O controle deve ser de pré ou pós-teste?
O laço controlado logicamente deve ser uma forma especial de um laço de contagem ou uma sentença separada?
do {...} while(<expr_bool>)
pós-teste
Controle de laços posicionados pelo usuário
Questões de Projeto
O mecanismo condicional deve ser uma parte integral da saída?
É possível sair apenas de um corpo de laço ou é possível sair também dos laços que o envolvem?
Exemplos
continue;
break;
break <rotulo>;
Iteração em Estruturas de Dados
Laços controlados pelo número de elementos em uma estrutura de dados
Exemplos
for (Obj in ArrayObjs) {...}
foreach (String name in strList)
Desvio Incondicional
goto
Sentença poderosa para controlar o fluxo de execução das sentenças de um programa
Ótima flexibilidade
Podem tornar os programas muito difícil de serem lidos
Comandos Protegidos
Alta complexidade na implementação
Utilização de conceitos de programação concorrente (não determinismo)
Alternativa a utilização do goto
exemplo
if <expr_bool> -> <sentença>
[] <expr_bool> -> <sentença>
[] <expr_bool> -> <sentença>
[] ...
[] <expr_bool> -> <sentença>
fi
Todas expressões booleanas são avaliadas
Domínios de Programação
Aplicações empresariais
Cobol
Inteligência Artificial
Lisp
Prolog
computação simbólicas
símbolos, compostos de nomes em vez de números, são manipulados
Aplicações científicas
Fortran
Programação de sistemas
C
PL/S
Software para a Web
Java
XHTML
PHP
Critérios de Avaliação de Linguagens
Legibilidade
Simplicidade
não possui
multiplicidade de recursos
sobrecarga de operadores
Ortogonalidade
alta ortogonalidade aumenta legibilidade
Tipos de dados
presença de mecanismos adequados para definir tipos e estruturas de dados
Projeto da Sintaxe
forma das palavras especiais
Forma e significado de sentenças
identificadores de tamanho médio ou grande
Facilidade de Escrita
Simplicidade
Alta ortogonalidade aumenta a simplicidade
Ortogonalidade
Alta ortogonalidade prejudica a faciladade de escrita
Suporte à Abstração
fator importante na facilidade de escrita
Expressividade
existência de operadores poderosos que permitem muitas computações com pouco
Confiablidade
Verificação de tipos
fator importante na confiabilidade
detecção de erros de tipos em tempo de execução ou compilação
Tratamento de exceções
interceptar erros em tempo de execução
Utilização de apelidos
restrições no uso de apelidos aumenta confiabilidade
Legibilidade e Facilidade de Escrita
Programas difíceis de ler são também difíceis de escrever e modificar
Quanto mais fácil é escrever um programa, mais provavelmente ele estará correto
Custo
Treinamento de programadores
simplicidade
ortogonalidade
experiência do programador
Escrever programas
facilidade de escrita da linguagem
compilar programas
Executar programas
projeto da linguagem
sistema de implementação
confiabilidade baixa
falha em sistema crítico
manutenção de programas
legibilidade