 
                                Conceitos de Linguagens de Programação Características Paavo Soeiro Motivação  Para que possa escolher uma linguagem apropriada ao problema.  Melhorar o entendimento da linguagem utilizada.  Facilitar o aprendizado de uma nova linguagem.  Fazer um melhor uso de determinada linguagem.  Facilitar o projeto de uma nova linguagem, ou uma nova funcionalidade. Pré-história  1842-1843  Ada Lovelace criou um algoritmo para o cálculo da sequência de Bernoulli usando a máquina analítica de Charles Babbage História 1950 a 1960  1954 – FORTRAN   1958 – LISP   Desenvolvida pela IBM por uma equipe liderada por John W. Backus. Desenvolvida por John McCarthy durante um projeto de pesquisa em inteligência artificial. 1959 – COBOL  Criado por um comitê de investigadores de várias instituições civis e governamentais 1967 a 1978      Nascimento dos paradigmas fundamentais 1962 – Simula 1964 – BASIC 1970 – Pascal 1969 a 1973 – C   1972 – Smalltalk   Dennis Ritchie, no AT&T Bell Labs Orientação a objetos 1972 – Prolog  Programação logica 1980  Módulos, performance  1983 – Ada  Sistemas modulares  1983  – C++ Fortalecimento da orientação a objetos  1987 – Perl 1990 – Era da Internet  1990 – Haskell  1991 – Python  1991 – Java  1993 – Ruby  1993 – Lua  1995 – JavaScript  1995 – PHP  2000 – C# Fonte: TIOBE Objetivos  Permitir que uma pessoa escreva programas que ajudem a resolver problemas.  Facilitando a comunicação entre o programador e a máquina.  Programação estruturada  Programação modular  Programação orientada a objetos  Programação linear Paradigma  Paradigma     Procedural Estrutura de blocos Orientação a objetos Computação distribuída  Paradigma   Imperativo: Funcional Lógica Declarativo: Grau de abstração  Linguagem  Assembly  Linguagem  de programação de médio nível C  Linguagem  de programação de baixo nível Java de programação de alto nível Geração  Segundo       Henri Bal e Dick Grune: Primeira geração - linguagem de máquina. Segunda geração - linguagens de montagem (assembly). Terceira geração - Linguagens procedurais. Quarta geração - Linguagens aplicativas. Quinta geração - Linguagens voltadas a Inteligência artificial como as linguagens lógicas (Prolog) e as linguagens funcionais (Lisp). Sexta geração - Redes neurais. Interpretada x Compilada  Interpretada:   Programa é executado instrução a instrução Cada comando é traduzido depois executado  Compilada:  Programa é executado somente após a tradução completa do código fonte. Características  Simplicidade  Abstração de dados  Ortogonalidade  Expressividade  Eficiência  Portabilidade  Leitura  Confiabilidade Abstração de dados  Descrever famílias de objetos focando nos aspectos fundamentais, sem entrar em possíveis detalhes específicos sobre um objeto em particular.  A abstração de dados torna-se cada fez mais importante a medida que o grau de complexidade do problema aumenta. Encapsulamento  Técnica que permite a separação de aspectos internos e externos de um objeto.  Impedir o acesso direto aos atributos.  Provê métodos de acesso para esses atributos. Herança  Permite que características comuns a um grupo de classes, seja encapsulado em uma superclasse, a qual é estendida em subclasses que herdam as características da classe base e adiciona características especificas.  Herança simples  Herança múltipla Polimorfismo  “Muitas formas”  Permite que classes derivadas de uma classe base invoquem métodos com mesma assinatura, porem com comportamentos diferentes. Tipos de polimorfismo  Inclusão – O mais básico, ponteiro (referencia) da classe pai, aponta para instancia da classe filha.  Animal animal = new Cachorro();  Paramétrico  Generics em Java  Sobrecarga  Coerção  Casting implicito Escopo de variáveis  Escopo diz respeito a visibilidade de uma variável.   O escopo pode ser:    Qual porção de código enxerga a variável? Dinâmico Estático Quanto a visibilidade:   Local Global C vs Java  Características  Gerais: C  Paradigma procedural  Compilado  Java  Orientado a objetos  Hibrido (bytecode + interpretador) Tipos de dados  int  float  double  char  int  float  double  char  byte  short  long  boolean Estruturas de repetição e controle  if   else   switch  for  while  do while  break  continue  return           if else switch for while do while break continue return try catch finally Palavras reservadas C Java Reservadas porem não utilizadas Operadores aritméticos Operador binário Descrição = Atribuição + Soma - Subtração / Divisão % Modulo (obtém o resto da divisão) Incremento e decremento Operador ++ -- Instrução Pós-fixado Pré-fixado var = var+1; var = var++; ou var++; var = ++var; ou ++var; var = var-1; var = var--; ou var--; var= --var; ou --var; Relacional Operador Descrição > Maior >= Maior igual < Menor <= Menor igual == Igualdade != Diferente Logico Operador Descrição && AND || OR ! NOT (operador de negação) Bit a bit Operador Descrição & AND | OR ^ XOR (OR exclusivo) << Deslocamento para esquerda >> Deslocamento para direita Portabilidade O programa em C precisa é distribuído em formato binário executável e precisa ser compilado em cada arquitetura que for executado.  Em Java, o programa é distribuído em bytecode e necessita de uma maquina virtual para ser executado. Segurança O programador C possui mais liberdades ao escrever seus códigos.  Ex.: acessando regiões de memoria fora do escopo da aplicação por meio de ponteiros. Encapsulamento  Java prove mecanismos de encapsulamento:    public protected private C  Através de struct Aplicações C   kernel Linux Excel  Java  Netbeans