Laboratório I Aula 1 Prof. Msc. Anderson da Cruz
Cronograma Apresentações Professor Unisinos Alunos Disciplina Matéria 2 2
Professor Formação Acadêmica Formado em Segurança da Informação Mestrado em Computação Aplicada Profissional 13 anos no mercado de desenvolvimento de software Web, Desktop, SOA, Mobile 3 3
UNISINOS Portal Unisinos Freqüência, notas,... Biblioteca MSDNAA Coordenação 4 4
UNISINOS - Avaliação Grau A (1/3 da nota) Grau B (2/3 da nota) Como calcular minha nota final (GA + (2 x GB)) / 3 Grau C Recupera ou Substitui 70% do Grau A ou Grau B 5 5
Disciplina - Avaliação Grau A Exercícios 10%; Trabalho 20%; Prova 70% Grau B Exercícios 10%; Trabalho 20%; Prova 70% Grau C Prova 70%; Trabalhos e Exercícios (30%) 6 6
Informações e Contato http://professor.unisinos.br/andercruz/ http://twitter.com/andercruzbr andercruz@unisinos.br anderson@a29.com.br 7 7
Alunos Apresentação da Turma Nome Profissão Qual o seu curso? Já programa? Qual linguagem? 8
Histórico ÁBACO CHINÊS - O Ábaco Chinês, criado no século XIV e ainda hoje utilizado, é um dispositivo manual para ADIÇÃO, SUBTRAÇÃO, MULTIPLICAÇÃO e DIVISÃO.
Histórico Máquina de Diferenças - A Máquina de Diferenças foi inventada pelo matemático britânico Charles Babbage (1823). Trata-se de um dispositivo operado a manivela para calcular logaritmos e funções trigonométricas.
Histórico Calculadoras Mecânicas - As Calculadoras Mecânicas foram criadas no final do século XIX, tornando-se obsoletas nos anos 70.
Histórico Batizado de ENIAC (electronic numerical integrator and computer), o primeiro computador foi construído nos Estados Unidos em 1945 (University of Pennsylvania) para cálculos balísticos na segunda guerra mundial.
Histórico O ENIAC possuía 19.000 válvulas e pesava 19 toneladas. Os principais componentes do ENIAC eram: Acumulador (unidade aritmética) Tabela de funções Unidade programadora (para armazenar as instruções) Capacidade de armazenar 20 números de 10 dígitos 1 ciclo por cada 10-5 s = 100 KHz = 0.0001 GHz Leitora de cartões Gravador de cartões
Histórico - Cronologia 1945 ENIAC. 1947/48 Invenção do transístor. 1951 - UNIVAC, primeiro computador comercial. 1953 - IBM 701 EDPM, primeiro computador IBM. 1954 FORTRAN (Formula Translator), primeira linguagem de programação de alto nível. 1955 ERMA, primeiro computador desenvolvido para sistemas bancários (Bank of America).
Histórico - Cronologia 1958 Invenção do circuito integrado (CHIP). 1962 SPACEWAR, primeiro game para computadores. 1964 Primeira interface gráfica com janelas, primeiro mouse. 1969 ARPANET, a internet original, desenvolvida para fins militares. 1970 Primeiro chip de memória RAM (Intel).
Histórico - Cronologia 1971 Intel 4004, primeiro microprocessador. 1976/77 Apple I, II e TRS-80, primeiros computadores domésticos. 1978 VisiCalc, primeira planilha eletrônica (software). 1979 WORDSTAR, um dos primeiros editores de texto. 1981 Primeiro IBM-PC, começa a era dos PC s. 1981 MS-DOS, sistema operacional da Microsoft. 1984 Apple Macintosh, com interface gráfica (GUI). 1985 Microsoft Windows. 1991 Linux. 1998 Google. 2005 - Android 2007 IPhone
Arquitetura de Von Neumann John Von Neumann (1903-1957), húngaro, considerado um dos matemáticos mais importantes do século XX Contribuiu com: Teoria dos conjuntos, Análise funcional, Teoria ergódica, Mecânica quântica, Ciência da computação, Economia, Teoria dos jogos, Análise numérica, Hidrodiâmica das explosões, Estatística; e muitas outras áreas da matemática
Arquitetura de Von Neumann Em 1945, estabeleceu os princípios de operação de um computador eletrônico digital. Estes princípios ficaram conhecidos como Arquitetura de Von Neumann e são ainda hoje as bases de operação dos computadores mais modernos. A Arquitetura de Von Neumann baseia-se em três componentes principais: Memória Unidade de Controle Unidade Central de Processamento
Arquitetura de Von Neumann
Arquitetura de Von Neumann Na memória são armazenados dados e programas (conjunto de instruções) que realizam determinados cálculos ou tarefas. A unidade de controle é um circuito lógico responsável pelo funcionamento da máquina, controlando o fluxo de instruções. A unidade central de processamento realiza os cálculos de acordo com as instruções.
Arquitetura de Von Neumann
Arquitetura de Von Neumann Memória Principal A unidade de memória central serve para guardar programas e dados, sob a forma de uma representação binária. Cada instrução da máquina é codificada como uma sequência de bits. Cada valor de um certo tipo é codificado por uma determinada sequência de bits.
Arquitetura de Von Neumann A Unidade Central de Processamento (CPU Central Processing Unit) trata do controle global das operações e da execução das instruções. Para esse efeito, a CPU contém as seguintes unidades internas: Unidade Lógica e Aritmética, ULA (ALU- Arithmetic and Logic Unit): A unidade lógica e aritmética é onde a maioria das ações ocorrem dentro da CPU. É responsável por cálculos aritméticos como soma e subtração, e comparações lógicos.
Arquitetura de Von Neumann Unidade central de processamento Unidade de Controle UC(CU, Control Unit): A Unidade de Controle reconhece um conjunto determinado de instruções, ditas instruções de máquina. Este conjunto é determinado pelo hardware da CPU, o que permite à Unidade de Controle reconhecer, isto é, decodificar, cada uma das instruções, através de um campo pré-determinado de bits que identifica o código da instrução. Uma vez decodificada a instrução I, a Unidade de Controle emite os sinais de controle necessários à sequência de ações internas definidas pela instrução I, por exemplo, operações aritméticas ou lógicas, ou transferências de informação entre os componentes do computador.
Arquitetura de Von Neumann Unidade central de processamento
Arquitetura de Von Neumann Entrada e Saída As unidades periféricas destinam-se a suportar as ações de comunicação da CPU e memória com o exterior, daí a sua designação de unidades de entrada e saída (ou I/O- input / output).
Arquitetura de um Computador Genérico Os principais componentes de um computador são: Memória Principal A memória principal é do tipo RAM (Random Access Memory), construída com materiais semicondutores onde os dados são armazenados de forma binária através de circuitos lógicos bi-estáveis, que podem representar os estados LIGADO ou DESLIGADO (ZERO ou UM). CPU A CPU é o processador da máquina, e contém uma unidade de controle, uma unidade aritmética, registradores, e memórias auxiliares para armazenar temporariamente os dados lidos/escritos na memória RAM (memória cache).
Arquitetura de um Computador Genérico Os principais componentes de um computador são: BIOS (Binary I/O System) Memória do tipo ROM (Read Only Memory) ou PROM (memória ROM alterável) onde são armazenados um conjunto de instruções que inicializam a máquina e que permitem que o usuário instale um sistema operacional. Memória auxiliar - Hard Disk (HD), meio magnético de armazenamento de dados. Dispositivos de entrada e saída Os principais dispositivos de de entrada e saída são o teclado, o mouse, e o monitor de vídeo.
Arquitetura de um Computador Genérico CPU Unidade de Controle Unidade Lógico Aritmética BIOS Memória RAM Interface Interface Periférico Periférico
Sistemas Numéricos Representa-se um número inteiro N, na base β, pela expressão ou equivalentemente,
Sistemas Numéricos No sistema decimal, β = 10 e a i e b j assumem os valores inteiros (0,1,2,3,4,5,6,7,8,9) correspondentes aos 10 dígitos: Os valores posicionais dos dígitos de um número são, respectivamente, as potências de dez: 10 3, 10 2, 10 1, 10 0 e, assim por diante, ou seja, 1000, 100, 10, 1. Neste caso, a representação equivale a um número de 4 dígitos. Exemplos: (347) 10 = 3 X 10 2 + 4 * 10 1 + 7 * 10 0 (32) 10 = 3 x 10 1 + 2 x 2 0 (555) 10 = 5 x 10 2 + 5 x 10 1 + 5 x 10 0 (4232) 10 = 4 x 10 3 + 2 x 10 2 + 3 x 10 1 + 2 x 10 0
Sistemas Numéricos No sistema binário, β = 2 e a i e b j assumem os valores 0 e 1. Devido a sua simplicidade, é a base de informação para um sistema computacional. O termo bit tem como origem a abreviatura de (b)inary dig(it). Exemplos: (11) 2 = 1 x 2 1 + 1 x 2 0 = (3) 10 (111) 2 = 1 x 2 2 + 1 x 2 1 + 1 x 2 0 (101) 2 = 1 x 2 2 + 0 x 2 2 + 1 x 2 2 (10111) 2 = 1 x 24 + 0 x 2 3 + 1 x 2 2 + 1 x 2 1 + 1 x 2 0
Sistemas Numéricos No sistema hexadecimal, β = 16, a i e b j os valores inteiros correspondentes aos 16 dígitos (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) Como no sistema hexadecimal são necessários 16 algarismos para representar um número nessa base e a base decimal só possui dez, torna-se necessário recorrer às letras A, B, C, D, E, F, o que não é obrigatório, pode-se utilizar outros símbolos. Exemplos: (12C) 16 = 1 x 16 2 + 2 x 16 1 + C x 16 0 = (300) 10 (BF) 16 = B x 16 1 + F x16 0 (54CC) 16 = 5 x 16 3 + 4 x 16 2 + C x 16 1 + C x 16 0
Sistemas Numéricos No sistema octal, β = 8, a i e b j os valores inteiros correspondentes aos 8 dígitos (0,1,2,3,4,5,6,7). Possui o mesmo conceito que o sistema hexadecimal, porém, trabalha apenas com 8 valores. Exemplos: (502) 8 = 5 x 8 2 + 0 x 8 1 + 2 x 8 0 = (322) 10
Sistemas Numéricos Conversão de números inteiros, do sistema decimal para o sistema binário Deve-se fazer uma série de divisões inteiras por 2 (aquela que dá um quociente e um resto). Divide-se o número decimal original por 2 e guarda-se o resto; divide-se o quociente da divisão anterior por 2 e guarda-se o resto. Assim procedemos repetidamente, até que o quociente dê zero. O número binário é a sequência dos restos, na ordem inversa a da sua obtenção.
Sistemas Numéricos Exemplo: converter o decimal 53 para binário 53 / 2 = 26, resto 1 26 / 2 = 13, resto 0 13 / 2 = 6, resto 1 6 / 2 = 3, resto 0 3 / 2 = 1, resto 1 1 / 2 = 0, resto 1 Ordem inversa, temos 1 1 0 1 0 1.
Sistemas Numéricos Conversão de números inteiros, do sistema decimal para o sistema octal ou hexadecimal Usa-se a mesma analogia do exemplo anterior, ou seja, divide-se de acordo com a base (octal = 8 ou hexadecimal = 16).
Sistemas Numéricos Exemplo: converter o decimal 527 para octal 527 / 8 = 65, resto 7 65 / 8 = 8, resto 1 8 / 8 = 1, resto 0 1 / 8 = 0, resto 1 Ordem inversa, temos 1 0 1 7. Exemplo: converter o decimal 527 para hexadecimal 527 / 16 = 32, resto 15 = F 32 / 16 = 2, resto 0 2 / 16 = 0, resto 2 Ordem inversa, temos 2 0 F.
Sistemas Numéricos Conversão de binário para octal ou para hexadecimal
Sistemas Numéricos Conversão de binário para octal Para converter um número binário em octal, divide-se a notação binária em grupos de 3 dígitos binários cada e substitui-se cada grupo pelo seu valor octal correspondente. Exemplo: converter o binário 1111100101 em octal. Inicialmente, separamos o valor dado em grupos de 3 dígitos (completando-se com zeros o grupo mais da esquerda, se necessário): 011 111 100 101 Octal: 3 7 4 5 Exercícios: (1001111) 2 = ( ) 8
Sistemas Numéricos Conversão de binário para hexadecimal Para converter para hexadecimal, apenas muda-se o tamanho de cada grupo para 4 dígitos. 0011 1110 0101 Hexadecimal 3 E 5 Exercícios: (1001111) 2 = ( ) 16
Sistemas Numéricos Conversão de octal ou hexadecimal para binário Cada símbolo octal deve ser substituído pelo conjunto de 3 dígitos binários que o representa. Cada símbolo hexadecimal deve ser substituído pelo conjunto de 4 binários que o representa. Exemplo: Converter o octal 5701 para binário. 5 7 0 1 101 111 000 001 Exemplo: Converter o hexadecimal C0A para binário. C 0 A 1100 0000 1010
Sistemas Numéricos Java permite representar uma constante inteira em octal, hexadecimal ou decimal. O início da constante determina a base: 0 indica um octal, 0x ou 0X indica um hexadecimal. A representação decimal não tem nenhum prefixo. Por exemplo, 43, 0x2B e 053 representam o mesmo valor inteiro 43. Apresenta o valor octal e hexadecimal em decimal int octal = 053; int hexa = 0x2b; System.out.println(octal); System.out.println(hexa); OU System.out.println(Integer.parseInt("53", 8)); System.out.println(Integer.parseInt("2b", 16));
Sistemas Numéricos Apresenta os valores em octal e hexadecimal a partir do decimal System.out.println(Integer.toOctalString(43)); System.out.println(Integer.toHexString(43));
Java Tipos de dados Bit é abreviatura de binary digit e corresponde à menor informação que podemos armazenar no computador (1 ou 0) 1 (um) Byte é composto por 8bits e é a medida utilizada para mensuração dos tipos de dados Tipos primitivos em java: int (4 bytes) System.out.println(Integer.SIZE) = 32 bits long (8 bytes) System.out.println(Double.SIZE) = 64 bits short (2 bytes) System.out.println(Short.SIZE) = 16 bits byte (1 byte) System.out.println(Byte.SIZE) = 8 bits char (2 bytes) System.out.println(Character.SIZE) = 16 bits
Java Tipos de dados Por exemplo, um valor short pode armazenar no máximo o valor positivo 01111111 11111111 = 32.767, que corresponde a todos os bits dos dois bytes ligados (1), menos o bit mais à esquerda de todo o conjunto, que é reservado para indicar o sinal do número: 0 indica positivo, 1 indica negativo. Os tipos long, int e byte também adotam o bit de sinal.
Operações bit a bit Java Tipos de dados Exemplos: int a = 8; //Repres. binária: 00000000 00000000 00000000 00001000 int b = 10; //Em binário: 00000000 00000000 00000000 00001010 int c = a b; //c recebe 00000000 00000000 00000000 00001010 = 10 int d = a ^ b; //d recebe 00000000 00000000 00000000 00000010 = 2 int e = a & b; //e recebe 00000000 00000000 00000000 00001000 = 8 int f = ~a; //f recebe 11111111 11111111 11111111 111110111 = -9
Operações de deslocamento Java Tipos de dados Existem três operadores bit a bit em Java para deslocamento. A operação de deslocamento consiste em deslocar para a direita ou para a esquerda a configuração binária de um certo valor inteiro ou char
Java Tipos de dados Por exemplo, um int de valor 10 representado por 00000000 00000000 00000000 00001010. Se for feito um deslocamento para a esquerda de, digamos, 2 posições, teremos 00000000 00000000 00000000 00101000, que é a representação binária de 40. Conclui-se que é necessário informar quantas posições se deseja deslocar.
Java Tipos de dados Operações de deslocamento Exemplos: int f = -3; 11111111 11111111 11111111 11111101 int g = f << 3; desloca f para a esquerda 3 posições; g valerá: 11111111 11111111 11111111 11101000 = -24 int h = f >> 2; valerá: 11111111 11111111 11111111 11111111 = -1 //o bit de sinal propagou-se por 2 posições, mantendo o valor negativo int i = f >>> 2; valerá: 00111111 11111111 11111111 11111111 = 1.073.741.823 não propagou o bit de sinal e o resultado virou positivo
Java Tipos de dados Observações Usar o operador << para deslocar n posições é equivalente a multiplicar por 2n. Usar o operador >> para deslocar n posições é equivalente a dividir (divisão inteira) por 2n. Todos os operadores bit a bit podem ser combinados com atribuição. Ex: x = x & y; pode ser resumida para x &= y;
Fases da Programação
Implementação de Linguagens de Programação Compilação geração de código executável dependente da plataforma de execução tradução lenta X execução rápida Interpretação pura sem geração de código execução lenta, independente de plataforma Híbrida geração de código intermediário independente de plataforma de execução tradução rápida X execução não muito rápida
Processo de Compilação de um Programa em Java
Processo de Compilação de um Programa em Java Bytecodes É o formato compilado dos programas java; Código intermediário (ajuda na portabilidade); As máquinas virtuais interpretam os bytecodes, ou seja, é necessária a instalação da máquina virtual;
Processo de Compilação de um Programa em Java Máquina Virtual Java (JVM) Camada intermediária entre a aplicação e o sistema operacional Existem versões para vários sistemas operacionais/ plataformas
Processo de Execução de um Programa em Java
Processo de Execução de um Programa em Java Etapa que antecede a execução do código em classes carregadas através da rede Class Loader distingue classes locais (seguras) de classes remotas (potencialmente inseguras) Verificação garante: Aderência à especificação da JVM Não-violação de políticas de acesso estabelecidas pela aplicação Não-violação da integridade do sistema Ausência de estouros de pilha Tipos de parâmetros corretamente especificados Ausência de conversões ilegais de tipos
Processo de Execução de um Programa em Java
Primeiro Programa em Java Abra o prompt de comando e verifique se o java está instalado através da seguinte instrução: Javac version Abra o notepad e coloque os seguintes códigos: public class Lab1Aula1 { public static void main(string[] Args) { } System.out.println( Bem-vindo ao JAVA! ); } Salve o trecho acima colocando o nome do arquivo Lab1Aula1.java (o nome do arquivo precisa estar obrigatoriamente com o mesmo nome da classe principal/public). Salve em c:\
Primeiro Programa em Java Abra o prompt de comando e vá até o local que encontra-se o arquivo Lab1Aula1.java c:\javac Lab1Aula1.java Lab1Aula1.java c:\java Lab1Aula1 Lab1Aula1.class Tela do computador -> Bem-vindo ao JAVA!
Fim Boa noite! 62