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 Desenvolvida pela IBM por uma equipe liderada por John W. Backus. 1958 LISP 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 Dennis Ritchie, no AT&T Bell Labs 1972 Smalltalk 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 Imperativo: Procedural Estrutura de blocos Orientação a objetos Computação distribuída Paradigma Declarativo: Funcional Lógica
Grau de abstração Linguagem de programação de baixo nível Assembly Linguagem de programação de médio nível C Linguagem de programação de alto nível Java
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. Qual porção de código enxerga a variável? O escopo pode ser: 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-1; var = var++; ou var++; var = var--; ou var--; 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: C public protected private Através de struct
Aplicações C kernel Linux Excel Java Netbeans