Slide 1 - di.ufpb

Propaganda
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
Download