Introdução à Computação: Sistemas de Computação Beatriz F. M. Souza ([email protected]) http://inf.ufes.br/~bfmartins/ Computer Science Department Federal University of Espírito Santo (Ufes), Vitória, ES – Brazil 1 Sistemas de Computação – Revisão Aula Passada • Sistemas de Computação – Parte 3: – Software Básico: • Sistemas Operacionais. 2 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • Linguagens de Programação - Classificação: – Quanto ao paradigma da programação: • Imperativas: – Estruturada; – Orientada a Objetos; – Concorrente; • Declarativa: – Funcional; – Lógica. 22 Sistemas de Computação • Linguagens de Programação - Classificação: – Quanto ao paradigma da programação: 23 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • Linguagens de Programação - Classificação: – Estruturada versus Orientada a Objetos: 29 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação • 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 Sistemas de Computação – 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