SlideShare uma empresa Scribd logo
ABSTRAÇÃO
• processo de representar um grupo de
entidades através de seus atributos comuns
• feita a abstração, cada entidade particular
(instância) do grupo é considerada somente
pelos seus atributos particulares
• os atributos comuns às entidades do grupo
são desconsiderados (ficam "ocultos" ou
"abstraídos")
ABSTRAÇÃO
• de processos
• de dados
ABSTRAÇÃO DE PROCESSOS
• o conceito de abstração de processos é um
dos mais antigos no projeto de linguagens
• absolutamente crucial para a programação
• historicamente anterior à abstração de dados
• todos os subprogramas são abstrações de
processo
• exemplo: chamadas sort(array1, len1),
sort(array2, len2), ...
MÓDULOS
• módulos são "containers" sintáticos contendo
subprogramas e grupos de dados relacionados
logicamente
• modularização: processo de projetar os módulos de
um programa
• a compreensão do programa pelos mantenedores seria
impossível sem organização modularizada
• além disso, há um ponto crítico: quando o projeto de
um programa estende-se por milhares de linhas,
recompilá-lo totalmente a cada atualização do código é
absolutamente inviável - daí a necessidade de
modularizá-lo
ENCAPSULAMENTO
• um agrupamento de subprogramas+dados que é
compilado separada/independentemente chama-se uma
unidade de compilação ou um encapsulamento
• um encapsulamento é portanto um sistema abstraído
• muitas vezes os encapsulamentos são colocados em
bibliotecas
• exemplo: encapsulamentos C (não são seguros porque
não há verificação de tipos de dados em diferentes
arquivos de encapsulamento)
OBJETOS
• um tipo abstrato de dados é um encapsulamento que
inclui somente um tipo específico de dado e os
subprogramas que fornecem as operações para este tipo
• detalhes de implementação do tipo ficam ocultos das
unidades fora do encapsulamento que o contém
• um objeto é uma variável (instância) de um tipo
abstrato de dados, declarada por alguma unidade
• programação orientada a objetos consiste no uso de
objetos no desenvolvimento do software
EXEMPLO: O PONTO-FLUTUANTE
COMO TIPO ABSTRATO DE DADOS
• embora o tipo ponto-flutuante esteja presente desde o início
da programação, raramente nos referimos a ele como tipo
abstrato de dados
• praticamente todas as linguagens permitem que se criem
"objetos" do tipo ponto-flutuante
• observe que existe um conjunto de operações que são válidas
para o tipo ponto-flutuante, exatamente como os “métodos”
definidos para uma “classe”
• além disso, a ocultação da informação está presente: o
formato real dos dados é inacessível ao programador - isto é
exatamente o que se espera de uma abstração
• isto é o que permite a portabilidade de um programa entre as
implementações da linguagem para plataformas particulares
TIPOS DE DADOS ABSTRATOS
DEFINIDOS PELO USUÁRIO
• a definição do tipo e as operações sobre objetos
do tipo estão contidas numa única unidade
sintática
• outras unidades de programa podem ter
permissão para criar variáveis do tipo definido
• a implementação do tipo não é visível pelas
unidades de programa que usam o tipo
• as únicas operações possíveis sobre objetos do
tipo são aquelas oferecidas na definição do tipo
CLIENTES
• unidades de programa que utilizam um tipo
abstrato chamam-se clientes daquele tipo
• a ocultação da representação do tipo abstrato é
vantajoso para seus clientes: o código no cliente não
depende desta representação, e mudanças na
representação não exigem mudanças nos clientes
(mas se o protocolo de alguma operação for
modificado, então é claro que os clientes precisam
ser alterados)
• a ocultação aumenta a confiabilidade: nenhum
cliente pode interferir intencional ou acidentalmente
na representação
EXEMPLO: UMA PILHA E SUAS
OPERAÇÕES ABSTRATAS
• create(stack)
• destroy(stack)
• empty(stack)
• push(stack, elem)
• pop(stack)
• top(stack)
• create(STK1); % STK1 é um objeto ou uma
instância do tipo stack
• create(STK2); % outra instância do tipo stack
TIPOS DE DADOS
ABSTRATOS EM C++
• os tipos abstratos de dados em C++ são as
chamadas classes
• as variáveis são declaradas como instâncias
de classes
• classes do C++ são baseadas nas da
SIMULA67 e no struct do C
• os dados definidos numa classe são os
membros de dados
FUNÇÕES-MEMBRO
• as funções definidas em uma classe são as
funções-membro
• as funções-membro são compartilhadas por
todas as instâncias de classe
• mas: cada instância tem seu próprio conjunto de
membros de dados
• uma função membro pode ter sua definição
completa dentro da classe ("inlined") ou apenas
seu cabeçalho
TEMPO DE VIDA DAS CLASSES
• as instâncias de classe podem ser estáticas,
stack-dinâmicas ou heap-dinâmicas,
exatamente como variáveis do C
• as classes podem incluir membros de dados
heap-dinâmicos, não obstante elas próprias
não serem heap-dinâmicas
OCULTAÇÃO DA
INFORMAÇÃO EM C++
• cláusula private: para entidades ocultas na
classe
• cláusula public: para as entidades visíveis
aos clientes. Descreve a interface com
objetos da classe
• cláusula protected: relacionada com
herança
Construtores
• Funções-membro usadas para inicializar os
membros de dados de um objeto recém-
criado
• Também alocam membros de dados heap-
dinâmicos
• Têm o mesmo nome da classe
• Pode-se sobrecarregar construtores
• Não têm tipo de retorno, não usam return
Destrutores
• Implicitamente chamados quando se encerra
o tempo de vida de um objeto
• Se um objeto é heap-dinâmico, será
explicitamente desalocado com delete
• O destrutor pode conter chamadas delete
para desalocar membros de dados heap-
dinâmicos
• Nome do destrutor: ~ <nome_da_classe>
• Não têm tipo de retorno, não usam return
Exemplo
#include <iostream.h>
class pilha {
private:
int *ptr_pilha;
int tam_max;
int top_ptr ;
public:
pilha( ){ //** um construtor
ptr_pilha = new int [100];
tam_max = 99;
top_ptr = -1;
}
Exemplo (continuação)
... ~pilha( ){ //** um destrutor
delete [ ] ptr_pilha;
}
void push ( int elem) {
if (top_ptr = = tam_max)
cout << “Erro - pilha cheian”;
else ptr_pilha[ + + top_ptr ] = elem;
}
void pop ( ) {
if (top_ptr = = -1)
cout << “Erro - pilha vazian”;
else top_ptr -- ;
}
Exemplo (continuação)
... int top { return ( ptr_pilha[top_ptr] ); }
int empty { return ( top_ptr = = -1 ); }
} ** fim da classe pilha
Código no cliente:
void main ( ) {
int top_one;
pilha stk;
stk.push(42);
stk.push(17);
top_one = stk.top( );
stk.pop( );
... }
Avaliação das classes C++
• As classes são tipos
• Não há construções de encapsulamento
generalizadas
• Exemplo: temos uma classe “matriz” e uma
classe “vetor”, e precisamos multiplicar um
objeto “matriz” por um objeto “vetor”.
• Em qual classe essa operação deve ser
definida?
Solução para “matriz × vetor”
class Matriz {
friend Vetor mult(const Matriz&, const Vetor&);
...}
class Vetor {
friend Vetor mult(const Matriz&, const Vetor&);
...}
Vetor mult(const Matriz& m1, const Vetor& v1){
..}
Se Matriz e Vetor pudessem ser definidas num único
pacote, evitaríamos esta construção pouco natural.
Java
• Suporte para tipos abstratos similar a C++
• Todos os tipos de dados definidos pelo
usuário são classes
• Todos os objetos são heap-dinâmicos e
acessados por variáveis de referência
• Todos os subprogramas (métodos) em Java
somente podem ser definidos em classes
• public e private são modificadores anexados
às definições de métodos/variáveis
Java
• Suporte para tipos abstratos similar a C++
• Todos os tipos de dados definidos pelo
usuário são classes
• Todos os objetos são heap-dinâmicos e
acessados por variáveis de referência
• Todos os subprogramas (métodos) em Java
somente podem ser definidos em classes
• public e private são modificadores anexados
às definições de métodos/variáveis
Pacotes Java
• Em C++ as classes são a única construção de
encapsulamento
• Java inclui uma construção adicional: os pacotes
• Pacotes podem conter mais de uma classe
• public e private são os chamados modificadores
• Os membros sem modificador (e os membros
public) de uma classe são visíveis a todas as
classes do mesmo pacote (escopo de pacote)
• Não há, portanto, necessidade de declarações
friend explícitas em Java
Exemplo
import java.io.*
class Pilha {
private int [ ] ref_pilha;
private int tam_max, top_index ;
public Pilha( ){ // um construtor
ref_pilha = new int [100];
tam_max = 99;
top_index = -1;
}
Exemplo (continuação)
... public void push ( int elem) {
if (top_index = = tam_max)
System.out.println(“Erro”);
else ref_pilha[ + + top_index ] = elem;
}
public void pop ( ) {
if (top_index = = -1)
System.out.println(“Erro”);
else --top_index ;
}
public int top { return ( ref_pilha[top_index] ); }
public boolean empty { return ( top_index = = -1 ); }
} ** fim da classe Pilha
Exemplo (continuação) - uso da classe Pilha
public class Testa_Pilha {
public static void main (String [ ] args) {
Pilha p1 = new Pilha( );
p1.push(42);
p1.push(29);
p1.pop( );
p1.pop( );
p1.pop( ); // Produz msg de erro
... }
• Não há destrutor (eliminado pela coleta de lixo implícita
em Java)
• Observe o uso de variável de referência em vez de
ponteiro
Classes parametrizadas em C++
Exemplo: suponha que o método construtor para a
classe pilha fosse:
pilha (int size ){
ptr_pilha = new int [size];
tam_max = size-1;
top_ptr = -1;
}
No cliente:
... pilha(150) p1;
Classes genéricas em C++
#include <iostream.h>
template < class TIPO >
class pilha {
private:
TIPO *ptr_pilha;
int tam_max;
int top_ptr ;
public:
pilha( ){ //** um construtor
ptr_pilha = new TIPO [100];
tam_max = 99;
top_ptr = -1;
}
Classes genéricas em C++ (continuação)
pilha (int size ){ // outro construtor sobrecarregado
ptr_pilha = new TIPO [size];
tam_max = size-1;
top_ptr = -1;
}
~pilha( ){ delete ptr_pilha; }
void push ( TIPO elem) {
if (top_ptr = = tam_max)
cout << “Erro - pilha cheian”;
else ptr_pilha[ + + top_ptr ] = elem;
}
void pop ( ) {...}
Classes genéricas em C++ (continuação)
... TIPO top { return ( ptr_pilha[top_ptr] ); }
int empty { return ( top_ptr = = -1 ); }
} ** fim da classe pilha

Mais conteúdo relacionado

Mais procurados

Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecasMaurício Linhares
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
JAVA - Pacotes
JAVA - PacotesJAVA - Pacotes
JAVA - Pacotes
Elaine Cecília Gatto
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
Rodrigo Vieira
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
Rafael Cassau
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Guilherme Garcia
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-pane
Rafael Pinheiro
 
Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2
RodrigoPeresPires
 
Slide Share s2 Rodd
Slide Share s2 RoddSlide Share s2 Rodd
Slide Share s2 Rodd
RodrigoPeresPires
 
Slide Semana2 Rodrigo
Slide Semana2 RodrigoSlide Semana2 Rodrigo
Slide Semana2 Rodrigo
RodrigoPeresPires
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
Natanael Fonseca
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Cristiano Almeida
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
Mateus Parente
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte I
Fabio Moura Pereira
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
Helder da Rocha
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
Marconi Rodrigues
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
Fabio Moura Pereira
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
John Godoi
 

Mais procurados (20)

Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecas
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
JAVA - Pacotes
JAVA - PacotesJAVA - Pacotes
JAVA - Pacotes
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-pane
 
Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2
 
Slide Share s2 Rodd
Slide Share s2 RoddSlide Share s2 Rodd
Slide Share s2 Rodd
 
Slide Semana2 Rodrigo
Slide Semana2 RodrigoSlide Semana2 Rodrigo
Slide Semana2 Rodrigo
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte I
 
Poo
PooPoo
Poo
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 

Semelhante a Cap10

Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
GersonZavala2
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
Filipo Mór
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
Elaine Cecília Gatto
 
Java Básico :: Stream
Java Básico :: StreamJava Básico :: Stream
Java Básico :: Stream
Wesley R. Bezerra
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
Saulo Arruda
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
Gabriel Faustino
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
Felipe Hummel
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
Jamildo Feitosa
 
Alex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsAlex Martelli's Python Design Patterns
Alex Martelli's Python Design Patterns
Luciano Ramalho
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
Iury Teixeira
 
Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetos
Felipe Hummel
 
Semana 1 Technocorp
Semana 1 TechnocorpSemana 1 Technocorp
Semana 1 Technocorp
AndreyRodriguesMenez
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
wildcat9335
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
Luis Ferreira
 

Semelhante a Cap10 (20)

Pged 03
Pged 03Pged 03
Pged 03
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Java Básico :: Stream
Java Básico :: StreamJava Básico :: Stream
Java Básico :: Stream
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Java11
Java11Java11
Java11
 
Ed1
Ed1Ed1
Ed1
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Alex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsAlex Martelli's Python Design Patterns
Alex Martelli's Python Design Patterns
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetos
 
Semana 1 Technocorp
Semana 1 TechnocorpSemana 1 Technocorp
Semana 1 Technocorp
 
Java7
Java7Java7
Java7
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 

Último

Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir"  - Jorge e MateusAtividade - Letra da música "Tem Que Sorrir"  - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
Mary Alvarenga
 
Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...
Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...
Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...
cristianofiori1
 
Evolução - Teorias evolucionistas - Darwin e Lamarck
Evolução - Teorias evolucionistas - Darwin e LamarckEvolução - Teorias evolucionistas - Darwin e Lamarck
Evolução - Teorias evolucionistas - Darwin e Lamarck
luanakranz
 
MAIO LARANJA EU DEFENDO AS CRIANÇAS E ADOLESCENTES
MAIO LARANJA EU DEFENDO AS CRIANÇAS E ADOLESCENTESMAIO LARANJA EU DEFENDO AS CRIANÇAS E ADOLESCENTES
MAIO LARANJA EU DEFENDO AS CRIANÇAS E ADOLESCENTES
estermidiasaldanhada
 
o que está acontecendo no Rio grande do Sul
o que está acontecendo no Rio grande do Sulo que está acontecendo no Rio grande do Sul
o que está acontecendo no Rio grande do Sul
CarlaInsStaub
 
"Está o lascivo e doce passarinho " de Luís Vaz de Camões
"Está o lascivo e   doce passarinho " de Luís Vaz de Camões"Está o lascivo e   doce passarinho " de Luís Vaz de Camões
"Está o lascivo e doce passarinho " de Luís Vaz de Camões
goncalopecurto
 
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdfEJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
Escola Municipal Jesus Cristo
 
Caderno de Estudo Orientado para Ensino Médio
Caderno de Estudo Orientado para Ensino MédioCaderno de Estudo Orientado para Ensino Médio
Caderno de Estudo Orientado para Ensino Médio
rafaeloliveirafelici
 
América Latina: Da Independência à Consolidação dos Estados Nacionais
América Latina: Da Independência à Consolidação dos Estados NacionaisAmérica Latina: Da Independência à Consolidação dos Estados Nacionais
América Latina: Da Independência à Consolidação dos Estados Nacionais
Valéria Shoujofan
 
Tesis de Maestría de Pedro Sousa de Andrade (Resumen).pdf
Tesis de Maestría de Pedro Sousa de Andrade (Resumen).pdfTesis de Maestría de Pedro Sousa de Andrade (Resumen).pdf
Tesis de Maestría de Pedro Sousa de Andrade (Resumen).pdf
Editora
 
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
CrislaineSouzaSantos
 
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdfAPOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
RenanSilva991968
 
Eurodeputados Portugueses 2019-2024 (nova atualização)
Eurodeputados Portugueses 2019-2024 (nova atualização)Eurodeputados Portugueses 2019-2024 (nova atualização)
Eurodeputados Portugueses 2019-2024 (nova atualização)
Centro Jacques Delors
 
O autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdfO autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdf
Letícia Butterfield
 
Correção do 1º Simulado Enem 2024 - Mês de Abril.pdf
Correção do 1º Simulado Enem 2024 - Mês de Abril.pdfCorreção do 1º Simulado Enem 2024 - Mês de Abril.pdf
Correção do 1º Simulado Enem 2024 - Mês de Abril.pdf
Edilson431302
 
Slide Internet Slang ingles 9 ano f.pptx
Slide Internet Slang ingles 9 ano f.pptxSlide Internet Slang ingles 9 ano f.pptx
Slide Internet Slang ingles 9 ano f.pptx
JOYCEAlves762488
 
Caça-palavras - ortografia S, SS, X, C e Z
Caça-palavras - ortografia  S, SS, X, C e ZCaça-palavras - ortografia  S, SS, X, C e Z
Caça-palavras - ortografia S, SS, X, C e Z
Mary Alvarenga
 
CIDADANIA E PROFISSIONALIDADE 4 - PROCESSOS IDENTITÁRIOS.pptx
CIDADANIA E PROFISSIONALIDADE 4 - PROCESSOS IDENTITÁRIOS.pptxCIDADANIA E PROFISSIONALIDADE 4 - PROCESSOS IDENTITÁRIOS.pptx
CIDADANIA E PROFISSIONALIDADE 4 - PROCESSOS IDENTITÁRIOS.pptx
MariaSantos298247
 
Profissão de Sociólogo - Bourdieu et al.
Profissão de Sociólogo - Bourdieu et al.Profissão de Sociólogo - Bourdieu et al.
Profissão de Sociólogo - Bourdieu et al.
FelipeCavalcantiFerr
 
Conteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persaConteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persa
felipescherner
 

Último (20)

Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir"  - Jorge e MateusAtividade - Letra da música "Tem Que Sorrir"  - Jorge e Mateus
Atividade - Letra da música "Tem Que Sorrir" - Jorge e Mateus
 
Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...
Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...
Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...
 
Evolução - Teorias evolucionistas - Darwin e Lamarck
Evolução - Teorias evolucionistas - Darwin e LamarckEvolução - Teorias evolucionistas - Darwin e Lamarck
Evolução - Teorias evolucionistas - Darwin e Lamarck
 
MAIO LARANJA EU DEFENDO AS CRIANÇAS E ADOLESCENTES
MAIO LARANJA EU DEFENDO AS CRIANÇAS E ADOLESCENTESMAIO LARANJA EU DEFENDO AS CRIANÇAS E ADOLESCENTES
MAIO LARANJA EU DEFENDO AS CRIANÇAS E ADOLESCENTES
 
o que está acontecendo no Rio grande do Sul
o que está acontecendo no Rio grande do Sulo que está acontecendo no Rio grande do Sul
o que está acontecendo no Rio grande do Sul
 
"Está o lascivo e doce passarinho " de Luís Vaz de Camões
"Está o lascivo e   doce passarinho " de Luís Vaz de Camões"Está o lascivo e   doce passarinho " de Luís Vaz de Camões
"Está o lascivo e doce passarinho " de Luís Vaz de Camões
 
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdfEJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
EJA -livro para professor -dos anos iniciais letramento e alfabetização.pdf
 
Caderno de Estudo Orientado para Ensino Médio
Caderno de Estudo Orientado para Ensino MédioCaderno de Estudo Orientado para Ensino Médio
Caderno de Estudo Orientado para Ensino Médio
 
América Latina: Da Independência à Consolidação dos Estados Nacionais
América Latina: Da Independência à Consolidação dos Estados NacionaisAmérica Latina: Da Independência à Consolidação dos Estados Nacionais
América Latina: Da Independência à Consolidação dos Estados Nacionais
 
Tesis de Maestría de Pedro Sousa de Andrade (Resumen).pdf
Tesis de Maestría de Pedro Sousa de Andrade (Resumen).pdfTesis de Maestría de Pedro Sousa de Andrade (Resumen).pdf
Tesis de Maestría de Pedro Sousa de Andrade (Resumen).pdf
 
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
AULA-8-PARTE-2-MODELO-DE-SITE-EDITÁVEL-ENTREGA2-CURRICULARIZAÇÃO-DA-EXTENSÃO-...
 
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdfAPOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
APOSTILA DE TEXTOS CURTOS E INTERPRETAÇÃO.pdf
 
Eurodeputados Portugueses 2019-2024 (nova atualização)
Eurodeputados Portugueses 2019-2024 (nova atualização)Eurodeputados Portugueses 2019-2024 (nova atualização)
Eurodeputados Portugueses 2019-2024 (nova atualização)
 
O autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdfO autismo me ensinou - Letícia Butterfield.pdf
O autismo me ensinou - Letícia Butterfield.pdf
 
Correção do 1º Simulado Enem 2024 - Mês de Abril.pdf
Correção do 1º Simulado Enem 2024 - Mês de Abril.pdfCorreção do 1º Simulado Enem 2024 - Mês de Abril.pdf
Correção do 1º Simulado Enem 2024 - Mês de Abril.pdf
 
Slide Internet Slang ingles 9 ano f.pptx
Slide Internet Slang ingles 9 ano f.pptxSlide Internet Slang ingles 9 ano f.pptx
Slide Internet Slang ingles 9 ano f.pptx
 
Caça-palavras - ortografia S, SS, X, C e Z
Caça-palavras - ortografia  S, SS, X, C e ZCaça-palavras - ortografia  S, SS, X, C e Z
Caça-palavras - ortografia S, SS, X, C e Z
 
CIDADANIA E PROFISSIONALIDADE 4 - PROCESSOS IDENTITÁRIOS.pptx
CIDADANIA E PROFISSIONALIDADE 4 - PROCESSOS IDENTITÁRIOS.pptxCIDADANIA E PROFISSIONALIDADE 4 - PROCESSOS IDENTITÁRIOS.pptx
CIDADANIA E PROFISSIONALIDADE 4 - PROCESSOS IDENTITÁRIOS.pptx
 
Profissão de Sociólogo - Bourdieu et al.
Profissão de Sociólogo - Bourdieu et al.Profissão de Sociólogo - Bourdieu et al.
Profissão de Sociólogo - Bourdieu et al.
 
Conteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persaConteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persa
 

Cap10

  • 1. ABSTRAÇÃO • processo de representar um grupo de entidades através de seus atributos comuns • feita a abstração, cada entidade particular (instância) do grupo é considerada somente pelos seus atributos particulares • os atributos comuns às entidades do grupo são desconsiderados (ficam "ocultos" ou "abstraídos")
  • 3. ABSTRAÇÃO DE PROCESSOS • o conceito de abstração de processos é um dos mais antigos no projeto de linguagens • absolutamente crucial para a programação • historicamente anterior à abstração de dados • todos os subprogramas são abstrações de processo • exemplo: chamadas sort(array1, len1), sort(array2, len2), ...
  • 4. MÓDULOS • módulos são "containers" sintáticos contendo subprogramas e grupos de dados relacionados logicamente • modularização: processo de projetar os módulos de um programa • a compreensão do programa pelos mantenedores seria impossível sem organização modularizada • além disso, há um ponto crítico: quando o projeto de um programa estende-se por milhares de linhas, recompilá-lo totalmente a cada atualização do código é absolutamente inviável - daí a necessidade de modularizá-lo
  • 5. ENCAPSULAMENTO • um agrupamento de subprogramas+dados que é compilado separada/independentemente chama-se uma unidade de compilação ou um encapsulamento • um encapsulamento é portanto um sistema abstraído • muitas vezes os encapsulamentos são colocados em bibliotecas • exemplo: encapsulamentos C (não são seguros porque não há verificação de tipos de dados em diferentes arquivos de encapsulamento)
  • 6. OBJETOS • um tipo abstrato de dados é um encapsulamento que inclui somente um tipo específico de dado e os subprogramas que fornecem as operações para este tipo • detalhes de implementação do tipo ficam ocultos das unidades fora do encapsulamento que o contém • um objeto é uma variável (instância) de um tipo abstrato de dados, declarada por alguma unidade • programação orientada a objetos consiste no uso de objetos no desenvolvimento do software
  • 7. EXEMPLO: O PONTO-FLUTUANTE COMO TIPO ABSTRATO DE DADOS • embora o tipo ponto-flutuante esteja presente desde o início da programação, raramente nos referimos a ele como tipo abstrato de dados • praticamente todas as linguagens permitem que se criem "objetos" do tipo ponto-flutuante • observe que existe um conjunto de operações que são válidas para o tipo ponto-flutuante, exatamente como os “métodos” definidos para uma “classe” • além disso, a ocultação da informação está presente: o formato real dos dados é inacessível ao programador - isto é exatamente o que se espera de uma abstração • isto é o que permite a portabilidade de um programa entre as implementações da linguagem para plataformas particulares
  • 8. TIPOS DE DADOS ABSTRATOS DEFINIDOS PELO USUÁRIO • a definição do tipo e as operações sobre objetos do tipo estão contidas numa única unidade sintática • outras unidades de programa podem ter permissão para criar variáveis do tipo definido • a implementação do tipo não é visível pelas unidades de programa que usam o tipo • as únicas operações possíveis sobre objetos do tipo são aquelas oferecidas na definição do tipo
  • 9. CLIENTES • unidades de programa que utilizam um tipo abstrato chamam-se clientes daquele tipo • a ocultação da representação do tipo abstrato é vantajoso para seus clientes: o código no cliente não depende desta representação, e mudanças na representação não exigem mudanças nos clientes (mas se o protocolo de alguma operação for modificado, então é claro que os clientes precisam ser alterados) • a ocultação aumenta a confiabilidade: nenhum cliente pode interferir intencional ou acidentalmente na representação
  • 10. EXEMPLO: UMA PILHA E SUAS OPERAÇÕES ABSTRATAS • create(stack) • destroy(stack) • empty(stack) • push(stack, elem) • pop(stack) • top(stack) • create(STK1); % STK1 é um objeto ou uma instância do tipo stack • create(STK2); % outra instância do tipo stack
  • 11. TIPOS DE DADOS ABSTRATOS EM C++ • os tipos abstratos de dados em C++ são as chamadas classes • as variáveis são declaradas como instâncias de classes • classes do C++ são baseadas nas da SIMULA67 e no struct do C • os dados definidos numa classe são os membros de dados
  • 12. FUNÇÕES-MEMBRO • as funções definidas em uma classe são as funções-membro • as funções-membro são compartilhadas por todas as instâncias de classe • mas: cada instância tem seu próprio conjunto de membros de dados • uma função membro pode ter sua definição completa dentro da classe ("inlined") ou apenas seu cabeçalho
  • 13. TEMPO DE VIDA DAS CLASSES • as instâncias de classe podem ser estáticas, stack-dinâmicas ou heap-dinâmicas, exatamente como variáveis do C • as classes podem incluir membros de dados heap-dinâmicos, não obstante elas próprias não serem heap-dinâmicas
  • 14. OCULTAÇÃO DA INFORMAÇÃO EM C++ • cláusula private: para entidades ocultas na classe • cláusula public: para as entidades visíveis aos clientes. Descreve a interface com objetos da classe • cláusula protected: relacionada com herança
  • 15. Construtores • Funções-membro usadas para inicializar os membros de dados de um objeto recém- criado • Também alocam membros de dados heap- dinâmicos • Têm o mesmo nome da classe • Pode-se sobrecarregar construtores • Não têm tipo de retorno, não usam return
  • 16. Destrutores • Implicitamente chamados quando se encerra o tempo de vida de um objeto • Se um objeto é heap-dinâmico, será explicitamente desalocado com delete • O destrutor pode conter chamadas delete para desalocar membros de dados heap- dinâmicos • Nome do destrutor: ~ <nome_da_classe> • Não têm tipo de retorno, não usam return
  • 17. Exemplo #include <iostream.h> class pilha { private: int *ptr_pilha; int tam_max; int top_ptr ; public: pilha( ){ //** um construtor ptr_pilha = new int [100]; tam_max = 99; top_ptr = -1; }
  • 18. Exemplo (continuação) ... ~pilha( ){ //** um destrutor delete [ ] ptr_pilha; } void push ( int elem) { if (top_ptr = = tam_max) cout << “Erro - pilha cheian”; else ptr_pilha[ + + top_ptr ] = elem; } void pop ( ) { if (top_ptr = = -1) cout << “Erro - pilha vazian”; else top_ptr -- ; }
  • 19. Exemplo (continuação) ... int top { return ( ptr_pilha[top_ptr] ); } int empty { return ( top_ptr = = -1 ); } } ** fim da classe pilha Código no cliente: void main ( ) { int top_one; pilha stk; stk.push(42); stk.push(17); top_one = stk.top( ); stk.pop( ); ... }
  • 20. Avaliação das classes C++ • As classes são tipos • Não há construções de encapsulamento generalizadas • Exemplo: temos uma classe “matriz” e uma classe “vetor”, e precisamos multiplicar um objeto “matriz” por um objeto “vetor”. • Em qual classe essa operação deve ser definida?
  • 21. Solução para “matriz × vetor” class Matriz { friend Vetor mult(const Matriz&, const Vetor&); ...} class Vetor { friend Vetor mult(const Matriz&, const Vetor&); ...} Vetor mult(const Matriz& m1, const Vetor& v1){ ..} Se Matriz e Vetor pudessem ser definidas num único pacote, evitaríamos esta construção pouco natural.
  • 22. Java • Suporte para tipos abstratos similar a C++ • Todos os tipos de dados definidos pelo usuário são classes • Todos os objetos são heap-dinâmicos e acessados por variáveis de referência • Todos os subprogramas (métodos) em Java somente podem ser definidos em classes • public e private são modificadores anexados às definições de métodos/variáveis
  • 23. Java • Suporte para tipos abstratos similar a C++ • Todos os tipos de dados definidos pelo usuário são classes • Todos os objetos são heap-dinâmicos e acessados por variáveis de referência • Todos os subprogramas (métodos) em Java somente podem ser definidos em classes • public e private são modificadores anexados às definições de métodos/variáveis
  • 24. Pacotes Java • Em C++ as classes são a única construção de encapsulamento • Java inclui uma construção adicional: os pacotes • Pacotes podem conter mais de uma classe • public e private são os chamados modificadores • Os membros sem modificador (e os membros public) de uma classe são visíveis a todas as classes do mesmo pacote (escopo de pacote) • Não há, portanto, necessidade de declarações friend explícitas em Java
  • 25. Exemplo import java.io.* class Pilha { private int [ ] ref_pilha; private int tam_max, top_index ; public Pilha( ){ // um construtor ref_pilha = new int [100]; tam_max = 99; top_index = -1; }
  • 26. Exemplo (continuação) ... public void push ( int elem) { if (top_index = = tam_max) System.out.println(“Erro”); else ref_pilha[ + + top_index ] = elem; } public void pop ( ) { if (top_index = = -1) System.out.println(“Erro”); else --top_index ; } public int top { return ( ref_pilha[top_index] ); } public boolean empty { return ( top_index = = -1 ); } } ** fim da classe Pilha
  • 27. Exemplo (continuação) - uso da classe Pilha public class Testa_Pilha { public static void main (String [ ] args) { Pilha p1 = new Pilha( ); p1.push(42); p1.push(29); p1.pop( ); p1.pop( ); p1.pop( ); // Produz msg de erro ... } • Não há destrutor (eliminado pela coleta de lixo implícita em Java) • Observe o uso de variável de referência em vez de ponteiro
  • 28. Classes parametrizadas em C++ Exemplo: suponha que o método construtor para a classe pilha fosse: pilha (int size ){ ptr_pilha = new int [size]; tam_max = size-1; top_ptr = -1; } No cliente: ... pilha(150) p1;
  • 29. Classes genéricas em C++ #include <iostream.h> template < class TIPO > class pilha { private: TIPO *ptr_pilha; int tam_max; int top_ptr ; public: pilha( ){ //** um construtor ptr_pilha = new TIPO [100]; tam_max = 99; top_ptr = -1; }
  • 30. Classes genéricas em C++ (continuação) pilha (int size ){ // outro construtor sobrecarregado ptr_pilha = new TIPO [size]; tam_max = size-1; top_ptr = -1; } ~pilha( ){ delete ptr_pilha; } void push ( TIPO elem) { if (top_ptr = = tam_max) cout << “Erro - pilha cheian”; else ptr_pilha[ + + top_ptr ] = elem; } void pop ( ) {...}
  • 31. Classes genéricas em C++ (continuação) ... TIPO top { return ( ptr_pilha[top_ptr] ); } int empty { return ( top_ptr = = -1 ); } } ** fim da classe pilha