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