Introdução à Computação: Sistemas de Computação Beatriz F. M. Souza (bfmartins@inf.ufes.br) http://inf.ufes.br/~bfmartins/ Computer Science Department Federal University of Espírito Santo (Ufes), Vitória, ES Brazil 1
Revisão Aula Passada Sistemas de Computação Parte 3: Software Básico: Sistemas Operacionais. 2
Torre de Babel: Existem entre 5000 e 6000 línguas faladas em nosso planeta; Cerca de 200 idiomas possuem mais de um milhão de falantes; O Mandarim por exemplo é falado por mais de 1,3 milhões de pessoas; Mas o que há em comum entre todos as línguas? Fonte:IBGE (site) 3
Comunicação: Toda comunicação exige uma linguagem comum baseada em um senso comum ; Linguagens Etimologia: Gramática: é o conjunto de regras individuais usadas para definição e uso de uma determinada língua; Sintaxe: é a parte da gramática de uma linguagem que estuda a disposição das palavras nas frases e das frases no discurso, e a sua relação lógica; Semântica: é o estudo do significado usado por seres humanos para se expressar através de uma linguagem. 4
Linguagens de Programação: A linguagem usada na computação também possui estes três elementos; E olhando para os níveis mais baixos de um computador teremos: Gramática => Microinstruções; Sintaxe => Zero-um-nês ; Semântica => Lógica. 5
Linguagens de Programação: As linguagens de programação também evoluíram com o tempo; Nos primeiros computadores a programação e seu uso eram confundidos, foi a partir das ideias de Turing que o conceito de programa e programação foi formalizado; Posteriormente com o uso de Máquinas Multiníveis e de suas linguagens permitiu uma visão abstrata da programação. 6
Linguagens de Programação Surge o Fortran: John W. Backus estava com preguiça de escrever programas em assembly; Criou então o Fortran (IBM Mathematical FORmula TRANslation System); IBM 704 entre 1953 e 1954; Programar ficou umas 20 vezes mais fácil. 7
Linguagens de Programação Fortran: O Fortran evoluiu em várias versões: Fortran II, III (até 1962); Fortran IV ou 66 (1965 e 1966); Fortran 77 (1976); Fortran 8x (1980); Fortran 90 (1990) e 95 (1995); Fortran 2003(ISSO/IEC 1539-1:2004) e 2008 (ISSO/IEC 1539-1:2010). 8
Linguagens de Programação Fortran: O Fortran possui vários dialetos (Absoft, Cray, GFortran, G95, IBM, Intel, Lahey/Fujitsu, Open Watcon, Pathscale, PGI, Silverfrost, Oracle, XL Fortran, Visual Fortran e outros); O Fortran influenciou o aparecimento de várias outras linguagens (ALGOL 58, BASIC, C, PL/I, PACT I, MUMPS, Fatfor). 9
Linguagens de Programação Surge o LISP: Surgiu em 1958 no Massachusets Institute of Technology (MIT); Criado pelo Professor John McCarthy; Uma notação simples, baseada em funções matemáticas; Baseado no conceito de listas; Sintaxe com muitos parênteses; Possui vários dialetos (Common Lisp, Scheme, Emacs Lisp, Autolisp, Arc, Clojure, Newlisp, Lush, Arc); 10
Linguagens de Programação LISP: Primeira linguagem funcional; LISP (LISt Processing); Foi usada em sistemas de mísseis americanos; Influenciou o aparecimento de outras linguagens funcionais como Logo, Smalltalck, Ruby, Dylan. 11
Linguagens de Programação Surgiu o ALGOL: A computação precisava de um padrão para algoritmos; Criou-se um comitê para tratar do assunto, que foi formado por: John Backus; C. A. R. Hoare; John McCarthy e outros. Desse comitê surgiu o ALGOL 58 (ALGOrithmic Language); Foi classificada posteriormente como linguagem Imperativa; 12
Linguagens de Programação Surgiu o ALGOL: Talvez a mais influente linguagem de programação; Considerada ancestral da maioria das linguagens modernas (chamadas de Algol-like); Muito mais amigável para seres humanos; Introduziu os blocos Begin-end ; Também evoluiu em várias versões. 13
Linguagens de Programação COBOL: COBOL (Common business-oriented Language) foi feita para negócios (Contadores, economistas, etc.); COBOL foi criada em 1958 por um comitê formado pela indústria, governo e academia; Linguagem imperativa e procedural; Atualmente existe uma versão orientada a objetos; 14
Linguagens de Programação COBOL: Possui muitos de dialetos (ACUCOBOL-GT, COBOL-IT, COBOL/2, DEC COBOL-10, DEC VAX COBOL, DOSVS COBOL, Fujitsu COBOL, Hitachi COBOL2002, HP3000 COBOL/II, IBM COBOL SAA, IBM COBOL/400, IBM COBOL/II, IBM Enterprise COBOL, IBM ILE COBOL, IBM OS/VS COBOL, ICL COBOL, iscobol, Micro Focus COBOL, Microsoft COBOL, Realia COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, Tandem (NonStop) COBOL85, Tandem (NonStop) SCOBOL, UNIVAC COBOL, Unisys MCP COBOL74, Unisys MCP COBOL85, Unix COBOL X/Open, Visual COBOL, Wang VS COBOL); Influenciou outras linguagens (AIMACO, C++, CONMTRAN, FACT, FLOW-MATIC, Smaltalk). 15
Linguagens de Programação Surgiu o C: Surgiu em 1972, e foi, durante muitos anos, a linguagem de programação mais popular; Criada por Dennis Ritchie da AT&T Bell Labs e usada na re-implemementação do UNIX; Linguagem de programação imperativa e procedural; A origem do nome é controversa, há duas versões: 1. Acredita que se deu o nome "C" à linguagem porque muitas das suas características derivaram de uma linguagem de programação anterior chamada "B ; 2. Baseia no fato que "C" é a segunda letra do nome da linguagem BCPL, da qual se derivou a linguagem B. 16
Linguagens de Programação C: Há diversas implementações (GCC, Clang, Intel C, MSVC, Pelles C, Watcon C); Vários dialetos (Cyclone, Unified Parallel C, Split-C, Cilk, C*); Influenciou numerosas linguagens (C++, C--, C#, Objective-C, Java, Rust, BitC, Perl, PHP, Python e inúmeras outras). 17
Linguagens de Programação - Classificação: Quanto ao nível de abstração: Linguagens de máquina: códigos binários; Linguagens de baixo nível: codificação com sintaxe próxima à linguagem de máquina, cujas instruções devem executar instruções de máquina com relação um para um; Linguagens de alto nível: aproxima-se da linguagem humana e está fundamentada em princípios da lógica matemática; 18
Linguagens de Programação - Classificação: Quanto à estrutura: Fracamente Tipada: permite operações entre tipos de dados diferentes (Smalltalk); Fortemente Tipada: Não permite operações entre tipos de dados diferentes (Pascal, Java); Dinâmicamente Tipada: Checa os tipos de dados em tempo de execução (Python, Ruby); Estaticamente Tipada: O tipo da variável é declarado em tempo de programação (C); 19
Linguagens de Programação - Classificação: Quanto à geração: Primeira geração: linguagens de máquina; Segunda geração: linguagens de baixo nível (assembly); Terceira geração: linguagens de alto nível, geralmente suportam variáveis, matrizes, instruções condicionais, instruções repetitivas, funções e procedimentos (C, Pascal, Fortran, Cobol); Quarta geração: linguagens que geram código a partir de expressões de alto nível; e linguagens de consulta (C++, Java, SQL); Quinta geração: linguagens lógicas para IA (Lisp, Prolog), sendo criadas para fazer deduções, inferências a partir de uma base de conhecimento. 20
Linguagens de Programação - Classificação: Quanto ao domínio da programação: Para aplicações científicas (Fortran); Para aplicações comerciais (COBOL); Para aplicações gerais (C); Para Inteligência Artificial (Lisp, Prolog); Para Scripting (shell script, Java Script, Pearl); Para propósitos especiais (XML, XMI, WSDL); 21
Linguagens de Programação - Classificação: Quanto ao paradigma da programação: Imperativas: Estruturada; Orientada a Objetos; Concorrente; Declarativa: Funcional; Lógica. 22
Linguagens de Programação - Classificação: Quanto ao paradigma da programação: 23
Linguagens de Programação - Classificação: Imperativas: A Programação Imperativa é um conceito baseado em estados, definidos por variáveis, e ações que são manipuladoras de estado, procedimentos; Pelo fato de permitir o uso de procedimentos como estruturação, também é conhecido como, Programação Procedural. 24
Linguagens de Programação - Classificação: Imperativas vantagens: Eficiência; Modelagem natural dos problemas reais; Dinâmica de mercado; Estão bem estabelecidas; Imperativas desvantagens: Foca no COMO e não no QUE precisa ser feito; Difícil legibilidade. 25
Linguagens de Programação - Classificação: Declarativa: A Programação Declarativa, ao contrário da Programação Imperativa que informa ao computador "COMO" as instruções devem ser executadas, preocupa-se em apenas dizer ao computador "O QUE precisa ser feito, cabendo ao computador decidir qual a melhor solução para essa solicitação. 26
Linguagens de Programação - Classificação: Declarativas vantagens: Facilidade de acesso a bases de conhecimento; Conversão de objetos complexos (Pessoa, Empregado, etc.) por binding ( ligação ) para trafegar em rede. Declarativas desvantagens: Produz códigos ilegíveis quando usada de forma funcional. 27
Linguagens de Programação - Classificação: Estruturada: Preconiza que todos os programas podem ser reduzidos a três estruturas: Sequência, decisão e iteração (ou repetição); Ex: C, Pascal, Cobol, etc. Orientada a Objetos: Está fundamentada em quatro pilares: Abstração, encapsulamento, herança e polimorfismo; Mantém a estrutura estruturada porém dentro de contextos específicos (classes, objetos e métodos); Ex: C++, Java, etc. 28
Linguagens de Programação - Classificação: Estruturada versus Orientada a Objetos: 29
Linguagens de Programação - Classificação: Concorrente: Fazem uso da execução concorrente (simultânea) de várias tarefas computacionais interativas; As tarefas podem ser implementadas como programas separados ou como um conjunto de threads criadas por um único programa; Essas tarefas podem ser executadas por um único processador, vários processadores em um equipamento, ou processadores distribuídos por uma rede; Diretamente relacionada à programação paralela; Ex: Java, C# (porque usam o modelo de memória compartilhada), Pascal Concorrente, etc. 30
Linguagens de Programação - Classificação: Funcional: Trata a computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis; Ex: Lisp, Haskell, etc. Lógica: Faz uso da lógica matemática. John McCarthy em 1958, foi o primeiro a publicar uma proposta de uso da lógica matemática para programação; Ex: Planner, Prolog, etc. 31
Linguagens de Programação - Propriedades: Legibilidade: facilidade de leitura e compreensão; Redigibilidade: diferencia as linguagens de alto e baixo nível, trata da facilidade de desenvolvimento; Confiabilidade: possui mecanismos que permitem a verificação automática durante o processo de compilação e execução; Eficiência: resultam em aplicações mais ou menos capazes de lidar com situações extremas (tempo real, aplicações embarcadas, etc.); Curva de aprendizado: tempo necessário para o aprendizado até o domínio da linguagem; 32
Linguagens de Programação - Propriedades: Ortogonalidade: diz respeito à capacidade da linguagem permitir ao programador combinar seus conceitos básicos sem que se produzam efeitos anômalos na combinação; Reusabilidade: possibilidade de reutilizar o mesmo código para diversas aplicações (uso de arcabouços - frameworks); Modificabilidade: possibilidade de alterações no programa a partir de novos requisitos, sem que tais modificações impliquem em mudanças em outras partes; 33
Linguagens de Programação - Propriedades: Portabilidade: é desejável que programas escritos em uma determinada linguagem se comportem da mesma maneira independente da ferramenta utilizada para traduzi-los para a linguagem de máquina ou da arquitetura computacional sobre a que estão executados. 34
Próxima Aula Segunda Prova: Todos os assuntos abordados até aqui, desde a Primeira Prova. Preparem-se para a Segunda Prova! Até breve. 35
http://nemo.inf.ufes.br/ 36