prefácio para a poorcmg/cefet-al/proo/aulas/proo_01_prefacio_poo2pp.pdf · 1 programação...
TRANSCRIPT
1
Programação Orientada a Objetos
Prefácio para a POOPrefácio para a POOAbstração e encapsulamento
Ti d D d Ab t t
Reinaldo [email protected]
Tipos de Dados AbstratosHistórico das Linguagens de POO
Paradigmas de Desenvolvimento de Software
Maneiras diferentes de pensar em resolver os problemas através de sistemas computacionais:problemas através de sistemas computacionais:
• Exemplos: Estruturado (funções e módulos), • Orientado a Objetos
2
2
Gap semântico
3
Gap semânticoDistância entre o problema no mundo real e o modelo abstrato construído;modelo abstrato construído;Quanto menor, mais rápida será a construção da solução;Portanto, diminuir o gap semântico tornou-se um dos objetivos da Engenharia de Software;
4
O paradigma orientado a objetos busca meios de diminuir este gap.
3
Modelagem Conceitual
5
Se essas abstrações não tiverem uma expressão direta (ou próxima) do mundo computacional, a complexidade da solução será aumentada
Modelagem ConceitualTarefa mais importante de um processo de desenvolvimento de softwaredesenvolvimento de software
realiza-se a análise do domínio da aplicação e a modelagem das entidades e fenômenos desse domínio que o projetista considera importante, independentemente da implementação
A tarefa de modelagem conceitual envolve dois
6
A tarefa de modelagem conceitual envolve dois mecanismos:
AbstraçãoRepresentação
4
Modelagem Conceitual
7
Paradigma Orientado a objetosRaciocinar e solucionar problemas em termos de objetos, diretamente associados às entidades do objetos, diretamente associados às entidades do mundo real;O mundo é composto por “objetos”;Objetos podem representar entidades concretas ou conceituais (uma estratégia de jogo, por ex.)
P
8
casa Pessoa
Árvore
5
Vantagens: Por que utilizar OO?Facilidade maior para modelagem de objetos do mundo real;mundo real;Necessidade de construção de softwares mais complexos;Maior extensibilidade: Facilidade de incrementar funcionalidades
9
Facilidade de manutençãoMaior reuso
Conceitos Chave de OOAuxiliam a administrar a complexidadeGuiam toda a tarefa de modelagemGuiam toda a tarefa de modelagemConceitos
AbstraçãoObjetosEncapsulamento
10
pHerançaPolimorfismo
6
AbstraçãoAbstração:
11Copyritght 1991 © Grady Booch
AbstraçãoO resultado de uma operação mental de abstração depende não tanto do fenômeno observado, mas depende não tanto do fenômeno observado, mas do interesse do observador
12
7
AbstraçãoDefinição 1:
“Uma abstração denota as características essenciais de um objeto que o distinguem de outros tipos de objetos e assim provê
uma fronteira conceitual firmemente definida, de acordo com a perspectiva do
13
de acordo com a perspectiva do observador.”
[Grady Booch]
AbstraçãoDefinição 2:
“( ) 2 P t l i t “(...) 2. Processo mental que consiste em escolher ou isolar um aspecto
determinado de um estado de coisas relativamente complexo, a fim de simplificar
a sua avaliação, classificação ou para
14
ç , ç ppermitir a comunicação do mesmo (...) ”
Fonte: Dicionário Houaiss
8
AbstraçãoDefinição 3:
“Uma abstração é uma visualização ou uma representação de uma entidade que
inclui somente os atributos de importância em um contexto particular.”
[R b t S b t ]
15
[Robert Sebesta]
AbstraçãoAbstração:
Técnica para lidar com a complexidade de um p pproblema.Destaca os aspectos importantes do objeto real abstraído, segundo perspectiva do observadorIgnora os detalhes não relevantes para o observador
Exemplos de uso da abstração no dia a dia:
16
Dirigir um carroUsar um tocador de DVD ou outro dispositivo eletrônicoTomar um vôo num aeroportoRetirar dinheiro num caixa eletrônico
9
Exemplos de Abstrações
Isto não é o mundo!Como assim?
17
Exemplos de AbstraçõesNão são aviões alemães da segunda guerra!
Wie geht es Ihnen?
Danke! Es geht
18
Danke! Es geht mir gut! Und Sie?
10
Exemplos de Abstrações
Não são casas!
19
Exemplos de AbstraçõesNão é você!
20
11
Exemplos de Abstrações
Não é uma ficha de preenchimento de dados!
21
AbstraçãoAbstração na programação:
Abstração de processos: Abstração de processos: • Dividimos um programa em subprogramas menores e mais
fáceis de escrever e compreender ("dividir para conquistar").• Para usar um subprograma escrito por terceiros abstraímos
a sua implementação e nos concentramos na sua interface.Abstração de dados:
22
• Serve para representarmos entidades reais do domínio do problema numa linguagem de programação, identificando as propriedades destas entidades que interessam ao sistema bem como suas operações.
12
Abstração de processosQuem usa as funções abaixo interessa-se por:int main() {
Saber quantos são os parâmetros para as funções
int main() {char valor[] = "4";int num;num = atoi(valor);printf("%f", sqrt(num));
}
23
chamadas e em que ordem são passadosSaber quais os tipos dos parâmetrosSaber os tipos dos dados que as funções retornamSaber o significado desse dado retornado
Abstração de dadosDefine-se uma estrutura e operações para um novo tipo:ptypedef struct st_stack {
int top;float data[MAX];
} stack;
stack* newstack (int) {...}int push (stack * float) { }
24
int push (stack *, float) {...}int pop (stack *, float *) {...}int isempty (stack) {...}int top (stack, float*) {...}int destroy (stack *) {...}
13
EncapsulamentoEncapsulamento:
25
Copyritght 1991 © Grady Booch
EncapsulamentoDefinição 1:
“Encapsulamento é o processo de esconder todos os detalhes de um objeto
que não contribuem para suas características essenciais.”
26
[Grady Booch]
14
EncapsulamentoDefinição 2:
“O l t é t d “O encapsulamento é um agrupamento de subprogramas e dos dados que eles
manipulam. O encapsulamento, separada ou independentemente compilável,constitui um
sistema abstraído e uma organização lógica
27
para uma coleção de computações relacionadas.”
[Robert Sebesta]
EncapsulamentoConsiderações/recomendações:
“Nenhuma parte de um sistema complexo deve depender dos detalhes internos das
outras partes”
“Para uma abstração dar certo sua
28
çimplementação deve estar encapsulada.”
[Grady Booch]
15
EncapsulamentoEncapsulamento:
Esconde os detalhes internos de uma abstraçãoEsconde os detalhes internos de uma abstraçãoUma vez selecionada a implementação de uma abstração, ela deve ser tratada como um segredo da abstração e escondida dos seus clientes.
Encapsulamento versus abstraçãoA b t ã t it
29
A abstração representa um conceitoO encapsulamento impede os clientes de verem como este conceito foi implementado
Exemplos de encapsulamentos
O encapsulamentode um Circuito Integrado!de um Circuito Integrado!
30
Ele no raio-x
16
Exemplos de encapsulamentos
Encapsulamento tradicionaltradicionalde uma CPU!
31
Encapsulamento meia-sola-metido-a-bestamas que é bonitinha, é!
Exemplos de encapsulamentos
Alguma dúvida sobreos benefícios do encapsulamentoos benefícios do encapsulamentohumano através da pele?
32
17
Exemplos de encapsulamentosEncapsulamento comprometido! Hummm, to vendo como ele foi implementado! Não é humano!
33
EncapsulamentoEncapsulamento nas linguagens:
Em C funções são completamente encapsuladas mas Em C, funções são completamente encapsuladas, mas a estrutura de um tipo abstrato de dados não é completamente protegida (encapsulamento imperfeito)
• Funções em outras bibliotecas têm acesso à estrutura interna do tipo, violando o encapsulamento
Em Modula-2 há como encapsular totalmente tanto
34
dados como subprogramasJava e C++ possuem construções sintáticas para controlar o nível de visibilidade de um elemento (tipos, dados ou subprogramas) numa biblioteca
18
EncapsulamentoExemplo em C: Elementos visíveis fora da biblioteca.
typedef struct st pilha {typedef struct st_pilha {int topo;float dados[MAX];
} pilha;
void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}int desempilha (pilha *, float *) {...}
Elementos invisíveis
35Obs: Em C, um arquivo de biblioteca define uma fronteira de encapsulamento.
int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}
EncapsulamentoExemplo em Java: Parte invisível fora da classe
public class Pilha {private int topo;private float dados[];
public Pilha (int tam) {...}public void empilha(float dado) {...}public float desempilha() {...}public float topo() { }
36
public float topo() {...}public boolean taVazia() {...}
}
Parte visível fora da classe (apenas para chamadas, a implementação é invisível sempre!)Obs: Em Java, uma classe
define uma fronteira de encapsulamento.
19
Tipos Abstratos de DadosQuando a linguagem não oferece um tipo nativo adequado para representar uma entidade do adequado para representar uma entidade do domínio do problema recorremos a um TAD"Um TAD é um encapsulamento que inclui somente a representação de dados de um tipo específico de dado e os subprogramas que f ã ti " [S b t 99]
37
fornecem as operação para esse tipo" [Sebesta99]TAD = encapsulamento(estrutura+operações)TIPO
Tipos Abstratos de DadosBenefícios da programação com TADs:
Método para organizar melhor um programa em Método para organizar melhor um programa em unidades lógicas que podem ser compiladas em separado.Permite modificações localizadas na representação ou operações do tipo (promove a manutenibilidade)O encapsulamento promove a independência entre o
38
O encapsulamento promove a independência entre o TAD e seus clientes.Aumento da confiabilidade, uma vez que os clientes não têm acesso direto à representação do TAD, a não ser por suas operações.
20
Tipos Abstratos de DadosUm TAD pilha implementado com arranjos:typedef struct st pilha {typedef struct st_pilha {
int topo;float dados[MAX];
} pilha;
void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}int desempilha (pilha *, float *) {...}
Representação ou estruturado TAD pilha
39
int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}
Operações do TAD pilha
Tipos Abstratos de DadosUm cliente para o TAD pilha:main() {main() {
pilha p;float x;
cria_pilha(&p);if (ta_vazia(p)) {
empilha(&p, 1.2f);empilha(&p, 3.0f);
Em respeito ao encapsulamento,não há acessos à representação
da pilha nos clientes, mas apenas àssuas operações.
40
}topo(&p, &x);if (x == 3.0f)
desempilha (&p, &y);limpe (&p);
}
21
Tipos Abstratos de DadosA implementação muda para lista encadeada:typedef struct st pilha { Modifica-se typedef struct st_pilha {
float dado;struct st_pilha prox;
} nopilha;typedef nopilha* pilha;
void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}
E a implementaçãodas operações
Modifica se a representação do TAD
41
p pint desempilha (pilha *, float *) {...}int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}
Tipos Abstratos de DadosO cliente não se altera (compare ao anterior):main() {main() {
pilha p;float x;
cria_pilha(&p);if (ta_vazia(p)) {
empilha(&p, 1.2f);empilha(&p, 3.0f);
42
}topo(&p, &x);if (x == 3.0f)
desempilha (&p, &y);limpe (&p);
}
22
Tipos Abstratos de DadosEntretanto, se o encapsulamento fosse violado...main() {main() {
pilha p;float x;
cria_pilha(&p);if (p.topo == -1) {
empilha(&p, 1.2f);empilha(&p, 3.0f);
Acessos à estruturado TAD violam o encapsulamento e
aumentam o acoplamento entreo TAD e seus clientes
Estes acessos à representaçãodo TAD são específicos para aimplementação com arranjos.
43
}x = p.dados[p.topo];if (x == 3.0f)
desempilha (&p, &y);limpe (&p);
}
p ç jNão servem para a nova
implementação com lista!
TADs e o encapsulamento
“A habilidade de mudar a representação de uma abstração sem perturbar quaisquer de seus clientesabstração sem perturbar quaisquer de seus clientes
é o principal benefício do encapsulamento”
“O encapsulamento não impede o programador de fazer coisas estúpidas”
[Grady Booch]
44
“O encapsulamento previne acidentes, não fraudes”
[Bjarne Stroustroup]
23
Tipos Abstratos de DadosO conjunto de operações públicas que um TAD oferece é chamado de Interface do TAD.oferece é chamado de Interface do TAD.Quando é que uma mudança num TAD exige mudanças nos clientes?
Quando há mudanças na interface dele.Se a interface permanecer a mesma, os clientes não se
45
alteram.
Tipos Abstratos de DadosMudou a interface da operação desempilha:typedef struct st pilha {typedef struct st_pilha {
float dado;struct st_pilha prox;
} nopilha;typedef nopilha* pilha;
void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}
Era assim...
46
p pint desempilha (pilha *, float *) {...}int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}
24
Tipos Abstratos de DadosMudou a interface da operação desempilha:typedef struct st pilha {typedef struct st_pilha {
float dado;struct st_pilha prox;
} nopilha;typedef nopilha* pilha;
void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}
Mudou a interface!
47
p pfloat desempilha (pilha *) {...}int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}
Tipos Abstratos de DadosO cliente não se altera (compare ao anterior):main() {main() {
pilha p;float x;
cria_pilha(&p);if (ta_vazia(p)) {
empilha(&p, 1.2f);empilha(&p, 3.0f);
Ferrou o cliente!
48
}topo(&p, &x);if (x == 3.0f)
desempilha (&p, &y);limpe (&p);
}
25
Tipos Abstratos de DadosO que uma linguagem deve ter para permitir a definição de TADs?definição de TADs?
Permitir o encapsulamento da definição do tipo e das operações do TAD numa unidade de compilação.Permitir acesso ao tipo definido para o TAD e ao cabeçalho das operações.Impedir o acesso à representação do TAD e à
49
Impedir o acesso à representação do TAD e à implementação das operações.
Tipos Abstratos de DadosEncapsulamento bom é aquele que...typedef struct st pilha { Permitetypedef struct st_pilha {
float dado;struct st_pilha prox;
} nopilha;typedef nopilha* pilha;
void cria_pilha (pilha *){...}int empilha (pilha *, float) {...}
Permite
Impede
50
p pint desempilha (pilha *, float *) {...}int ta_vazia (pilha) {...}int topo (pilha, float*) {...}int limpa (pilha *) {...}
26
Tipos Abstratos de DadosSuporte para TADs em C:
C permite que se especifiquem TADs em bibliotecasC permite que se especifiquem TADs em bibliotecascompiladas em separado.A definição do tipo e os protótipos das funções que implementam as operações ficam num arquivo de cabeçalhos (com extensão .h).A implementação das operações ficam num arquivo de
51
A implementação das operações ficam num arquivo de implementação (extensão .c)O encapsulamento de C não é perfeito: os clientes podem acessar os campos da estrutura do tipo.
Tipos Abstratos de DadosExemplo de uma biblioteca em C:#define MAX 100
pilha.h#define MAX 100
typedef struct st_pilha {int topo;float dados[MAX];
} pilha;
// protótipos das funções
52
void cria_pilha (pilha *);int empilha (pilha *, float);int desempilha (pilha *, float *);int ta_vazia (pilha);int topo (pilha, float*);int limpa (pilha *);
27
Tipos Abstratos de DadosExemplo de uma biblioteca em C:#include "pilha h"
pilha.c#include "pilha.h"
void cria_pilha (pilha *p) {...
}
int empilha (pilha *p, float e) {...
53
}
... //outras funções
Tipos Abstratos de DadosSuporte para TADs em Pascal:
O Pascal atual permite que TADs sejam definidos em O Pascal atual permite que TADs sejam definidos em units (arquivos com extensão .pas).Uma unit possui uma área (interface) para declaração do tipo e cabeçalho dos procedimentos e funções que implementam as operações.Há ainda uma área (implementation) onde os
54
Há ainda uma área (implementation) onde os subprogramas são implementados, à qual o cliente não tem acesso.Assim como C, o acesso aos campos do tipo no cliente são sintaticamente válidos.
28
Tipos Abstratos de DadosExemplo de Unit:unit TPilha;
TPilha.pas
interfacetype pilha = record
topo : integer;dados : array[1..MAX] of real;
end;
d i ilh ( ilh )
55
procedure cria_pilha (var p: pilha);procedure empilha (var p : pilha; e : float);function desempilha (var p : pilha) : real;function ta_vazia (var p : pilha) : boolean;function topo (p : pilha) : real;procedure limpa (var p : pilha);
Tipos Abstratos de DadosExemplo de Unit:implementation
TPilha.paspprocedure cria_pilha (var p: pilha);begin
...end;
procedure empilha (var p : pilha; e : float);begin
56
...end;
... {outros subprogramas}
end. {fim da unit}
29
Tipos Abstratos de DadosSuporte para TADs em Java:
Define TADs em classes (arquivo .java).( q j )A classe é a unidade sintática para encapsulamento de TADs e também a unidade de compilação.Pode-se controlar o nível de encapsulamento de cada elemento de uma classe.Java não tem construtores de tipo como struct do C ou
57
Java não tem construtores de tipo como struct do C ou o record do Pascal: cada classe em si é um novo tipo com propriedades e operações.Valores de classes são chamados de objetos.
Tipos Abstratos de DadosExemplo de classe Java:public class Pilha {
Pilha.javapublic class Pilha {
private int topo;private float[] dados;
public void empilha (float e) {...
}
58
public float desempilha() {...
}... // outros métodos
} //fim da classe
30
Tipos Abstratos de DadosSuporte para TADs em C++:
C++ permite que TADs sejam definidos em classesC++ permite que TADs sejam definidos em classes(arquivos .cpp).A classe deve ser a unidade sintática adequada para encapsulamento de TADs.Pode-se controlar o nível de encapsulamento de cada elemento de uma classe
59
elemento de uma classe.Como em Java, valores de classes são chamados de objetos.
Tipos Abstratos de DadosExemplo de classe C++:class pilha {
Pilha.cppclass pilha {
private:int topo;float dados[MAX];
public:void empilha (float e) {
...}
60
float desempilha() {...
}... // outros métodos
} //fim da classe
31
Programação Orientada a ObjetosO paradigma de programação orientado a objetos baseia-se em três princípios chave [3]:baseia se em três princípios chave [3]:
Abstração de dados (TADs)HerançaLigação Dinâmica
Em geral, os TADs definidos numa linguagem
61
orientada a objetos são chamados de classes.Os valores destes tipos são chamados objetos.Classes se relacionam por meio de herança.
Programação Orientada a ObjetosUma operação do TAD implementada numa classe é chamada de método.é chamada de método.Uma forma de invocar um método de um objeto é enviando-lha uma mensagem.A ligação dinâmica associa uma mensagem ao método mais adequado
62
A ligação dinâmica permite que a "herança funcione" dinamicamente, isto é, em tempo de execução
32
Programação Orientada a ObjetosProgramar no paradigma OO é:
Definir classes (estrutura + operações) para os Definir classes (estrutura + operações) para os elementos do domínio do problema em questão.
• A criação de uma classe pode usar a definição de classes prévias, criando composições de classes.
Relacionar classes por meio de herança e composiçãoEntender o mecanismo de vinculação dinâmica da
63
Entender o mecanismo de vinculação dinâmica da linguagem e aproveitar seu incrível poder.Abstrair a sua visão do problema para um conjunto de objetos interagindo. Bem-vindo ao mundo da Orientação a Objetos!
Histórico das Linguagens OOLinha do tempo da programação orientada a objetos:objetos:
SIMULA67: 1967 por Dahl e Nygaard• Introduziu os principais conceitos da programação orientada a
objetos: classes, objetos, herança.SmallTalk-72: 1972 por Alan Kay e Adele Goldberg
• Primeiro ambiente gráfico para programação orientada a
64
Primeiro ambiente gráfico para programação orientada a objetos. É considerada a única linguagem puramente orientada a objetos. Introduziu o conceito de janelas em GUIs
C++: 1984 por Bjarne Stroustrup• Uma das primeiras linguagens OO com boa performance.
33
Histórico das Linguagens OOLinha do tempo da programação orientada a objetos:objetos:
Eiffel: 1986 por Bertrand Meyer • Possui algumas características avançadas da OO, tais
como, tipos genéricos, asserções e herança múltipla.Java: 1995 por James Gosling e outros
• Primeira linguagem OO da era da Internet. Portabilidade,
65
Primeira linguagem OO da era da Internet. Portabilidade, design enxuto e ampla API são suas características marcantes. Empregada em várias plataformas, de celulares e PDAs a sistemas empresariais distribuídos.
Smalltalk
Galeria de fotosC++
84 72
Alan KayBjarne Stroustroup
SIMULAJAVA
6772
66James Gosling95
34
Galeria de fotosNa busca por uma máquina que fosse fácil de ser usada por crianças
FLEX machine idealizada por Kay
p çe não programadores ele antecipou a idéia de PDAs. (abaixo)
67
Alan Kay não apenas previu que os objetos dominariam a programação mas lançou a idéia do computador pessoal e do ambiente gráfico baseado em janelas. (acima) Dynabooks idealizados por Kay
Galeria de fotosKay projetou o Smalltalk para ser não apenas uma linguagem de programação linguagem de programação, mas um ambiente interativo baseado em janelas sobrepostas que permitissem ao programador fazer simulações de objetos. O termo programação orientada a objetos é atribuído a sua
68Esboço do Smalltalk-72
autoria. (ao lado)
35
Bibliografia[1] Booch, G. Projeto Orientado a Objetos. 1991.[2] Hostetter C Survey of Objected Oriented [2] Hostetter , C. Survey of Objected Oriented Programming Languages. Disponível em:http://www.rescomp.berkeley.edu/~hossman/cs263/paper.html.
[3] Sebesta, R. Conceitos de Linguagens de Programação.4a. edição. Bookman. 1999.
69
[4] Sierra, Kathy, Bates, Bert. Head First Java. 2005.
BibliografiaOutros sites sobre o assunto:
http://www campusprogram com/reference/en/wikipediahttp://www.campusprogram.com/reference/en/wikipedia/o/ob/object_oriented_programming_1.htmlhttp://en.wikipedia.org/wiki/Object-oriented_programminghttp://jeffsutherland.com/papers/Rans/OOlanguages.pdfhttp://www princeton edu/~ehuang/OOP/index html
70
http://www.princeton.edu/~ehuang/OOP/index.htmlhttp://javaranch.com (legal!)
36
Programação Orientada a Objetos
Prefácio para a POOPrefácio para a POOAbstração e encapsulamento
Ti d D d Ab t t
Reinaldo [email protected]
Tipos de Dados AbstratosHistórico das Linguagens de POO
Compilação e modularizaçãoUnidade sintática:
Menor unidade de código sintaticamente válida segundo Menor unidade de código sintaticamente válida segundo a gramática da linguagemEx: declaração de variáveis, chamadas de procedimentos, expressões, declaração de programas
Unidade de compilação:C j t d id d i táti d id
72
Conjunto de unidade sintáticas de um programa reunidas segundo as regras da gramática da linguagem.Ex: programa principal, biblioteca de procedimentos, módulos, etc.
37
Compilação e modularização
main() {Unidade de Compilação dobro.c
main() {int x=2, y;
y = dobro(x);printf("%d", y);
}Unidades sintáticas
73
int dobro(int x) {return 2*x;
}
Compilação e modularizaçãoCompilação independente:
As unidades de compilação são compiladas de forma As unidades de compilação são compiladas de forma independente umas das outras. Não há necessidade de uma ordem de compilação e a quantidade e os tipos dos parâmetros não são checados entre chamada e definição.
Compilação em separado:
74
Compilação em separado:As fronteiras das unidades de compilação são ultrapassadas para verificação de tipos e as unidades não são independentes entre si.
38
Compilação Independente
main() { soma(int x) {main.c bib.cEu não quero nem
saber se soma() tem parâmetro ou
soma();}
func() {...
}
...}
subtrai() {...
}
pnão!
Quero meu
O Linker não vai gostar
disso...
75
} }
main.obj bib.obj
advogado!
Compilador
Compilação em Separado
main() { soma(int x) {main.c bib.cAm♥r! Sua função
soma() é sem parâmetro?soma();
}
func() {...
}
...}
subtrai() {...
}
parâmetro?
Nã-na-nim-na-não! soma() tá
sem parâmetro! Não fofo, é com parâmetro!
S k!
76
} }
main.obj bib.obj
Compilador
Sm♥ck!
39
Compilação e modularizaçãoPódio da compilação!
Em Separado
Possuem compilação independente:FORTRAN77, C de Ritchie
Possuem compilação em separado:
pa ad
12 3
Independente Nenhuma
77
Possuem compilação em separado:Ada, C ANSI, Modula-2, Java, C++
Não possuem nenhuma das duas:Pascal original, FORTRAN II, BASIC