Transcript Slide 1
Introdução à Programação
Um enfoque orientado a construção de
modelos em programas baseados em objetos
Gustavo Motta
Departamento de Informática - UFPB
1. Introdução
►O
que é ciência da computação?
Conceitos da disciplina
► “Ciência
da computação é – e sempre será – o interesse entre a
manipulação mecanizada e humana de símbolos [algoritmos],
usualmente referidos como ‘computação’ e ‘programação’,
respectivamente.”
Algoritmo – conceito fundamental
Edsger W. Dijkstra, 1989
na ciência da computação
► “Ciência
(engenharia) da computação é o estudo sistemático de
processos algorítmicos — teoria, análise, projeto, eficiência,
implementação e aplicação — que descrevem e transformam
informação.”
ACM/IEEE-CS , 1989
(C) 2008 Gustavo Motta
2
1. Introdução –
► Conceito
O estudo dos algoritmos
de algoritmo
Conjunto de passos que definem a forma como uma
tarefa é executada
► Passos
ordenados, não ambíguos e executáveis
► Atividade
finita
Exemplos
► Instruções
► Regras
para utilização de caixas bancários
para cálculo do imposto de renda
► Procedimentos
para cálculo com a operações fundamentais da
aritmética
► Instruções
para matrícula na universidade
► ...
(C) 2008 Gustavo Motta
3
1. Introdução –
► Exemplo
O estudo dos algoritmos
– algoritmo de divisão euclidiana
Condição de entrada – pré-condição
► Dois
números naturais
a – dividendo
b – divisor, sendo b diferente de zero
Condição de saída – pós-condição
► Dois
números naturais únicos
q – quociente
r – resto, onde r maior ou igual a zero e menor que b
Tal que: a = b q + r
(C) 2008 Gustavo Motta
4
1. Introdução –
►
O estudo dos algoritmos
Exemplo – algoritmo de divisão euclidiana
Passos para execução
1.
Atribuir, inicialmente, o valor de zero para q e o valor de a
para r
2.
Caso b seja maior que r, o algoritmo pára e o resultado é do
quociente é q e do resto é r
3.
Subtrair b de r e atribuir o resultado para r
4.
Somar um ao valor de q
5.
Executar o passo 2.
(C) 2008 Gustavo Motta
5
1. Introdução –
►
O estudo dos algoritmos
Principais características dos algoritmos
Concebidos por seres humanos
Representados por programas (software) escritos em
linguagens de programação
►
Alto nível
►
JAVA, C, PASCAL, C++, ADA, ALGOL, FORTRAN
Baixo nível – linguagens de máquina e assembler (montagem)
Executados por máquinas
►
Físicas - hardware
►
Computadores
(analógicos
eletromecânicos, eletrônicos, ...
ou
digitais),
mecânicos,
Abstratas
Engendradas na mente humana, formalismo matemático,
máquinas virtuais (C)
implementadas
em programas de computador 6
2008 Gustavo Motta
1. Introdução –
►
O estudo dos algoritmos
Origens na matemática
Objetivava encontrar um conjunto de comandos
suficiente para descrever, unificadamente, a resolução
de um problema qualquer de um determinado tipo
►
Mecanização do cálculo aritmético, por exemplo
Idéia de reduzir todo raciocínio a um processo mecânico
(automatizado), baseado em algum tipo de cálculo formal
Alguns personagens
►
Euclides (c. 330 a.C. a 277 a.C.) – matemático grego
►
Axiomatização e método dedutivo para demonstração de
teoremas – primórdios da busca pela automatização do raciocínio
Leibniz (1646-1716) – matemático alemão
Vislumbrou a estrutura de um sistema onde “processos mentais”
de uma inferência poderiam ser reduzidos a um procedimento
(C) 2008
Gustavo Motta
7
simples – mecânico
– regras
para manipulação de símbolos
1. Introdução –
►
O estudo dos algoritmos
Exemplo de “automatização do raciocínio”
Premissas
►
Todos os cães são mamíferos
►
Todos os mamíferos são animais
Conclusão – “insight, inspiração”
►
Todos os cães são animais
Silogismo categórico de Aristóteles
►
Raciocínio dedutivo estruturado formalmente a partir de duas
proposições, ditas premissas, das quais, por inferência, se
obtém necessariamente uma terceira, chamada conclusão
(C) 2008 Gustavo Motta
8
1. Introdução –
►
O estudo dos algoritmos
Exemplo de “automatização do raciocínio”
Premissas
►
Todos os As são B tanto A quanto B são A (A = AB)
►
Todos os Bs são C tanto B quanto C são B (B = BC)
Todos aqueles que são mamíferos e que são animais, são os
mamíferos
Conclusão
►
Todos As são C tanto A quanto C são A (A = AC)
Todos aqueles que são cães e que são mamíferos, são os cães
Todos aqueles que são cães e que são animais, são os cães
A representação algébrica (simbólica) do silogismo
facilita implementar a inferência por meio de um
algoritmo
(C) 2008 Gustavo Motta
9
1. Introdução –
►
O estudo dos algoritmos
Exemplo de “automatização do raciocínio”
Algoritmo
►
Pré-condição
Duas premissas
►
►
►
Pós-condição
►
A=AB (premissa 1)
B=BC (premissa 2)
A=AC (conclusão)
Passos para execução – regra de inferência
1. Substitua B na premissa 1 pelo valor correspondente a B da
premissa 2, obtendo a equação resultante A=ABC
2. Na equação resultante do passo anterior, substitua AB pelo valor
correspondente a AB na premissa 1, obtendo a equação final
A=AC (pós-condição)
e o algoritmo pára
(C) 2008 Gustavo Motta
10
1. Introdução –
►
O estudo dos algoritmos
O que se pode concluir?
A regra de inferência anterior prescinde da semântica
expressa nas premissas
►
Todos os cães são mansos
Todos os mansos não mordem
Todos os cães não mordem
Um argumento é avaliado pela validade de sua inferência e
não pela verdade de suas premissas
Caso as premissas sejam verdadeiras, a conclusão é verdadeira
(C) 2008 Gustavo Motta
11
1. Introdução –
►
O estudo dos algoritmos
O que se pode concluir?
Uma vez concebido (descoberto) um algoritmo, sua
execução não dependerá do conhecimento dos
princípios em que se baseia
Uma calculadora digital “sabe” dividir números inteiros (algoritmo
de divisão euclidiana), mas não sabe o que significa números
inteiros, divisão, algoritmos, etc.
►
Algoritmos codificam conhecimento (raciocínio) necessário a
resolução de um problema
►
A semântica dos algoritmos, das pré e pós condições
“dependem” do observador humano
►
A seqüência de passos de um algoritmo corresponde a prova
(demonstração) de um teorema, onde a pré-condição é a
(C) 2008 Gustavo Motta
12
hipótese e a pós-condição é a tese
1. Introdução –
►
O estudo dos algoritmos
Quais as limitações dos algoritmos?
Não são capazes de calcular funções não-computáveis
►
Função para provar teoremas em geral
►
Função para decidir se um programa qualquer pára, ou não,
sendo conhecido os dados de entrada deste
►
Na aritmética
► Teorema da incompletude de Gödel – Kurt Gödel (19061978) matemático austro-húngaro
► Impossibilidade de se construir uma máquina que, de modo
consistente, resolva todos os problemas da matemática,
apenas com os recursos do próprio sistema
Problema da parada – formulado por Alan M. Turing (matemático
inglês, 1912-1954) em 1936
Etc.
Não são auto-organizáveis - depende do ser humano
A capacidade (“inteligência”) das máquinas limita-se
(C) 2008 Gustavo Motta
13
ao conhecimento embutido
no algoritmo
1. Introdução –
► Questões
O estudo dos algoritmos
no desenvolvimento de algoritmos
Perspectiva em pequena escala
► Como
projetar novos algoritmos?
► Como representá-los em linguagens de programação?
► Qual paradigma de programação?
Orientado a funções - Orientado a objetos
Perspectiva em grande escala – Engenharia de Software
► Como
estruturar/lidar com programas com milhões de linhas de
código?
► Como compreender os problemas do mundo real para
implementar soluções em programas de computador?
► Como lidar com os fatores humanos?
desenvolvedores e clientes
► Qual
processo de construção
de software a adotar?
(C) 2008 Gustavo Motta
14
1. Introdução –
► Máquinas
O desenvolvimento das máquinas
algorítmicas
algorítmicas (computacionais)
Objetivam executar mecanicamente (automaticamente)
as tarefas (computáveis) especificadas nos algoritmos
Tipos de máquinas
► Abstratas
Existentes na mente humana
Máquinas virtuais
Máquinas formalizadas matematicamente ► Máquinas
de Turing (1936)
Define um sistema formal para computação universal
► Máquinas
de Post (1943)
(C) 2008 Gustavo Motta
15
1. Introdução –
► Máquinas
O desenvolvimento das máquinas
algorítmicas
algorítmicas (computacionais)
Tipos de máquinas - Físicas
► Mecânicas
Ábaco (c. 3000 a. C. na Babilônia)
Régua de cálculo (Willian Oughtred, 1632) – analógico
Dispositivos para cálculos astronômicos – analógicos
► Quadrantes
► Compasso
de setor
► “Antikythera”
– dispositivo cálculo de calendário lunar (79 a. C.)
► Etc.
(C) 2008 Gustavo Motta
16
1. Introdução –
► Máquinas
O desenvolvimento das máquinas
algorítmicas
algorítmicas (computacionais)
Tipos de máquinas - Físicas
► Mecânicas
– baseadas em engrenagens
Máquinas de calcular - digitais
► Blaise
Pascal (1642)
matemático francês)
► G.
máquina
para
somar
(1623-1662,
W. Leibniz (1673) – máquina com as 4 operações
Máquina de Jacquard (1752-1834)
► Programa
expressos em cartões perfurados especificando o
padrão de desenho de tecidos em teares (1801)
► Operários
com menor qualificação poderiam fazer desenhos
elaborados
►O
conhecimento de desenhar foi transferido para os cartões
perfurados (programas) processados em teares (máquinas)
► Os
(C) 2008 Gustavo Motta
operários forneciam basicamente a energia mecânica
17
1. Introdução –
► Máquinas
O desenvolvimento das máquinas
algorítmicas
algorítmicas (computacionais)
Tipos de máquinas - Físicas
► Mecânicas
– baseadas em engrenagens – digital
Máquina diferencial de Babbage (1822) – matemático Inglês (17921871)
► Produção
► Projeto
de tabelas logarítmicas
iniciado nunca foi concluído
Máquina analítica de Babbage (1933)
► Primeiro
► Não
► Os
modelo teórico de computador universal
foi implementado – totalmente mecânico – movido à vapor
algoritmos não eram “amarrados” à máquina, que poderia ser
programada livremente
► 1842
(C) 2008 Gustavo Motta
18
– Primeiro programa escrito por Lady Ada Augusta Byron
1. Introdução –
► Máquinas
O desenvolvimento das máquinas
algorítmicas
algorítmicas (computacionais)
Tipos de máquinas - Físicas
► Eletromecânicas
– baseadas em engrenagens – digital
Tabulador de Hollerith (1890)
► Tabular
o resultado do censo nos EUA
► Cartões
perfurados
Representavam números que eram interpretados e somados em
acumuladores
► Fundou
a Hollerith Tabulating Machines, compondo uma das
empresas que resultou na International Business Machine – IBM
em 1924
(C) 2008 Gustavo Motta
19
1. Introdução –
► Máquinas
O desenvolvimento das máquinas
algorítmicas
algorítmicas (computacionais)
Tipos de máquinas - Físicas
► 1o
Computador eletromecânico (relé) universal
Z1 (1936) – Konrad Zuze (1910-1995) engenheiro civil alemão
http://www.computersciencelab.com/ComputerHistory/History.htm
► Computadores eletrônicos
Mark I (1944) – Howard
Aiken – Harvard
University – relés
comandados eletronicamente
ENIAC (1946) – Universidade da Pensilvânia – válvulas
EDVAC (1949) – John von Neumann
► Concebeu
a moderna arquitetura de computadores
► Programa
armazenado
(C) 2008 Gustavo Motta
20
1. Introdução –
► As
Histórico das linguagens de programação
primeiras linguagens
Frutos da busca de um “procedimento efetivo
(mecânico)” para verificar a validade de uma proposição
matemática
► Busca
frustrada, mas que resultou no desenvolvimento da teoria
da computação
Usadas para representar algoritmos, possuindo
► Sintaxe
para determinar a forma com que as entidades de um
programa são estruturadas
► Semântica
para determinar o significado de um programa, isto
é, o que provoca quando executado por uma máquina
algorítmica e como é entendido por um programador
(C) 2008 Gustavo Motta
21
1. Introdução –
► As
Histórico das linguagens de programação
primeiras linguagens
Subconjunto não ambíguo de linguagens naturais
► Português,
inglês, francês, etc.
Linguagens artificiais
Universais – capaz de expressar qualquer algoritmo
► Formal
e matematicamente bem definidas
O -cálculo (lambda-cáclulo) proposto por Alonzo Church (19031995 – matemático norte-americano) em 1936
► Cálculo para expressar todas as funções computáveis
► Base teórica das linguagens de programação
Lógica combinatorial proposta em 1924 por Moses Shönfinkel
► Equivalente ao -cálculo
0001 0110 1110
► Linguagem de máquina
0010 0110 0001
Instruções diretamente interpretada por computadores
Difíceis para programar e para entender 0001 1110 0110
(C) 2008 Gustavo Motta
22
1. Introdução –
► As
Histórico das linguagens de programação
primeiras linguagens
Linguagens artificiais
► Linguagens
dos anos 50
de montagem (assembler) - fins dos anos 40 início
Notação simbólica para instruções em linguagem de máquina
Uso de mnemônicos
Primeiros tradutores – assembler linguagem de máquina
LOAD R, X
ADD R, 1
LOAD X, R
tradução
0001 0110 1110
LOAD
X
0010 0110 0001
ADD
Dependente de máquinas específicas
Instruções muito primitivas
(C) 2008 Gustavo Motta
Linguagens de baixo nível
R
R
1
0001 1110 0110
LOAD
X
R
23
1. Introdução –
► As
Histórico das linguagens de programação
primeiras linguagens
Linguagens artificiais
► Linguagens
de alto nível
Meados dos anos 50
Objetivos
► Expressar algoritmos independente de uma máquina particular
► Linguagem mais próxima da linguagem natural
► Facilitar a programação e o entendimento de programas
Compiladores para traduzir automaticamente programas em
linguagens de alto nível para programas em linguagem de máquina
código fonte
alto nível
X=X+1
código objeto
linguagem de máquina
código objeto
intermediário
tradução
LOAD R, X
ADD R, 1
LOAD X, R
tradução
(C) 2008 Gustavo Motta
Processo de compilação
0001 0110 1110
0010 0110 0001
0001 1110 0110
24
1. Introdução –
Histórico das linguagens de programação
1950
Fortran
1960
Simula
1970
Pascal
Smalltalk
Lisp
Algol-60
Cobol
Algol-68
PL/1
C
1980
ML
Prolog
Ada
Miranda
C++
1990
Haskell
Java
2000
Linguagens
orientadas a
objetos
Linguagens concorrentes e
imperativas
Linguagens Linguagens
funcionais
lógicas
(C) 2008 Gustavo Motta
Fonte: adaptação da fig. 1.1 do livro Programming Language Concepts and Paradigms
de David A. Watt. Prentice Hall, 1991
25
1. Introdução –
► Inicialmente
Evolução da ciência da computação
– anos 40, 50 e meados de 60
Computadores
► Custo
elevado
Primeiro HD criado pela IBM em 1956, com 5Mbytes de
capacidade, custava mais de US$ 1.000.000,00
PDP-1 – primeiro minicomputador – fabricado pela DEC nos anos
60, custava aproximadamente US$ 120.000,00, e possuía
4 Kbytes de memória principal
► Grandes
em tamanho
► Pequena capacidade de memória e processamento
► Programas
Usados para resolver “problemas simples”
Baixo custo de desenvolvimento
Aplicações militares, científicas e em organizações de grande porte
► Lei
de Moore (1965) – co-fundador da Intel
O número de transistores por polegada quadrada nos circuitos
Gustavo
Motta (revisto nos anos 70 para a cada
26
integrados dobrará(C)a2008
cada
ano
18 meses)
1. Introdução –
Evolução da ciência da computação
► Hoje
Computadores
► Baixo
custo
► Simples de usar e de dimensões reduzidas
► Grande capacidade de memória e processamento
► Interconectados em rede
Programas
► Usados
para resolver “problemas complexos”
► Elevados custos de desenvolvimento
► Processo de desenvolvimento complexo
Importância do fator humano
Crise de software permanente
► Aplicações
de software permeiam toda a sociedade
► Exemplos:
lazer,
entretenimento,
cultura e informação
(C) 2008
Gustavo Motta
Sociedade da informação
27
1. Introdução –
►O
A construção de modelo para resolução
de problemas
que são modelos?
“Representação simplificada e abstrata de fenômeno ou
situação concreta, e que serve de referência para a
observação, estudo ou análise” (dicionário Aurélio)
► Os
fenômenos existentes no mundo real são muitos complexos
para serem modelados em todos os seus detalhes
► Adota-se
um processo para construção de modelos que
Considera a realidade sendo formada por diferentes entidades que
exibem um certo comportamento exterior e uma certa organização
interior
► Permite pensar como entidades interagem para compor novas
entidades
Abstrai as propriedades externas (observáveis, essenciais) de uma
entidade para distingui-las das propriedades internas (não
observáveis, acidentais),
considerando
o problema que o
(C) 2008 Gustavo
Motta
28
Belvedere
(1958),
litogravura
- M.
C. Escher
Waterfall
(1961),
litogravura
- M. C.
Escher
René Magritte,
1928-1929
observador
que
resolver
1. Introdução –
A construção de modelo para resolução
de problemas
► Exemplos
Problema 1: Controlar o acendimento-apagamento de
uma lâmpada
►A
►e
construção de uma solução (modelo) visa identificar
Propriedades essenciais – observáveis externamente
► A lâmpada está acesa ou apagada – estado da lâmpada
► Os comandos (procedimentos, operações, controles) para
acender e apagar a lâmpada
visa desprezar
Propriedades acidentais – não essenciais
► O fabricante da lâmpada
► O tipo da lâmpada – incandescente ou fluorescente
► O preço da lâmpada
► O acabamento do interruptor
► A cor dos fios de conexão
► A última pessoa
queGustavo
instalou
(C) 2008
Motta a lâmpada
► Etc.
29
1. Introdução –
A construção de modelo para resolução
de problemas
► Exemplos
Problema 1: Controlar o acendimento-apagamento de
uma lâmpada
► Como
representar as propriedades essenciais?
Identificar um conjunto de variáveis para representar o estado da
entidade modelada
Especificar um conjunto de operações que determinam o
comportamento observável da entidade com base em seu estado,
podendo modificá-lo
Lâmpada
acende()
estadoDaLampada
apaga()
mostraEstado()
(C) 2008 Gustavo Motta
Operações que permitem
interagir com o modelo da
entidade (fenômeno)
observada (estudado)
30
1. Introdução –
A construção de modelo para resolução
de problemas
modelo Lampada
inicio do modelo
variavel
estadoDaLampada = apagada;
► Exemplos
Declaração do estado
entidade representada
Problema
1: Controlar o acendimento-apagamento
de
operacao
acende()
Símbolo para operador
inicio
que atribui um valor
uma lâmpada
estadoDaLampada = aceso;
(à direita) a uma
► Representação do modelo numa pseudo-linguagem
variável (à esquerda)de
fim
programação
operacao
apaga()
► Cabe
ressaltar que este modelo considerou os aspectos
Declaração das
inicio essenciais na perspectiva do problema enunciando
operações da entidade
estadoDaLampada
=
apagado;
Caso fosse para representar as lâmpadas
à venda num
representada
fim
supermercado, as propriedade essenciais seriam diferentes
operacao mostraEstado()
inicio
se (estadoDaLampada == aceso)
exiba “A lâmpada está acesa”;
senão
exiba “A lâmpada está apagada”;
(C) 2008 Gustavo Motta
fim
fim do modelo
Símbolo para operador de
igualdade que determina se
dois valores são iguais
31
1. Introdução –
Aspectos éticos
► Que
impacto a ciência da computação e a
programação, em particular, trazem para a
sociedade e para os indivíduos?
Implicações nos direitos autorais
Uso militar
Redução de empregos
Privacidade dos indivíduos
Conhecimento das capacidades, limitações e ramificações
das tecnologias da informação
Antagonismos, ambivalências, dilemas
► Afinal,
o que é ética?
(C) 2008 Gustavo Motta
32