Framework de Bruno Preiss

Propaganda
Framework de Bruno Preiss
Sumário
Introdução
Estruturas de Dados Fundamentais
Projeto Orientado a Objetos
Tipos Abstratos de Dados Java
Tipos Abstratos de Dados C++
Application Frameworks
Projetos
2
Introdução
Introdução
Tipos Abstratos e Dados
Tipos de Dados e Abstrações
 Tipos Abstratos e Dados

Características de linguagens que é
necessário conhecer
Linguagem Java
 Linguagem C++

4
Tipos de Dados e Abstrações
Uma abstração é a idéia de uma
característica ou propriedade independente
de qualquer objeto ou coisa real que possua
esta característica ou propriedade
Por meio de abstração pode-se raciocinar
sobre características de um objeto sem
conhecer o objeto
Abstrações servem para esconder detalhes
irrelevantes em um dado contexto
5
Tipos Abstratos e Dados (1)
Em linguagens de programação variáveis são
abstrações compostas de diversos atributos:







Nome – rótulo de referência no programa
Endereço – localização na memória
Valor – quantidade representada
Duração – intervalo de tempo no qual a variável existe
Escopo –comandos no programa no qual a variável é visível
Tipo – conjunto de valores que podem ser atribuídos ao
atributo valor e conjunto de operações que podem ser
realizadas
Tamanho –memória necessária para a representação
6
Tipos Abstratos e Dados (2)
Associação é o processo de atribuição de valor a um
dado atributo, podendo ser


estática (feita em tempo de compilação)
dinâmica (feita em tempo de execução).
Todas as linguagens de programação possuem tipos
de dados nativos ou embutidos, tais como inteiros,
reais, caracteres, etc
Freqüentemente a natureza do problema a tratar em
programas de computadores leva à criação de
abstrações apropriadas para a aplicação geradora
dos programas
7
Tipos Abstratos e Dados (3)
Para tratar de tipos de dados não nativos às
linguagens de programação são definidos os
Tipos Abstratos de Dados (TAD)
Com as linguagens orientadas a objeto os
tipos abstratos de dados passaram a
apresentar características próprias para essa
representação, por meios das classes.
As classes são semanticamente muito mais
ricas do que as construções struct do C ou
record do Pascal
8
Linguagem Java
Tipos primitivos e tipos referenciados
Instâncias criadas de forma explícita (new)
Comparação


= = (mesmo objeto)
equal (mesmo valor em diferentes instâncias)
Passagem de parâmetros


Por valor para tipos primitivos
“Por referência” para tipos referenciados (valor de
endereço)
9
Linguagem C++
Passagem de parâmetros
Por valor
 Por referência

10
Estruturas de Dados Fundamentais
Estruturas de Dados Fundamentais
Conceito
Implementação Java
A Classe Array
 A Classe LinkedList

Implementação C++
A Classe Array
 A Classe LinkedList

12
Conceito de Estruturas de Dados
Fundamentais (1)
Em Estruturas de Dados estudam-se
diversos Tipos Abstratos de Dados (TAD)









Pilhas
Filas
Deques
Listas
Árvores
Filas de prioridade
Conjuntos
Grafos
etc.
13
Conceito de Estruturas de Dados
Fundamentais (2)
Todos esses Tipos Abstratos de Dados
podem ser implementados usando arrays ou
estruturas encadeadas.
Arrays e listas encadeadas são base para os
demais Tipos Abstratos de Dados
Passaram estes a ser chamados de
Estruturas de Dados Fundamentais não
sendo chamados de Tipos Abstratos de
Dados
14
Projeto Orientado a Objetos
Projeto Orientado a Objetos
Conceitos iniciais
Containers
Hierarquias de Objetos e Padrões de Projeto
(Frameworks)
16
Conceitos iniciais (1)
Abordagem dos projetos de software



orientada a dados
orientada a processos
orientada a objetos
Objetos combinam dados e procedimentos
(também chamados de métodos ou funções)

Esta abordagem permite que se tenha abstração
e encapsulamento.
17
Conceitos iniciais (2)
Uma interface é um conjunto de declarações
de métodos
Uma classe abstrata é uma classe que
especifica apenas uma interface


Não se pode instanciar uma classe abstrata
Em C++ classes abstratas possuem funções
membros puramente virtuais que declaram
apenas uma interface, sem implementação
As classes abstratas são usadas como
classes base para as classes derivadas
18
Conceitos iniciais (3)
A declaração de funções membros
virtuais permite ter acesso às
implementações
fornecidas
pelas
classes derivadas por meio da interface
da classe base
Não é necessário saber como uma
instância de objeto é implementada
nem de que classe derivada ela é
instância.
19
Conceitos iniciais (4)
Este padrão de projeto (interfaces e
classes abstratas) explora a idéia do
polimorfismo
Uma mesma abstração de interface é
válida para a definição de cada tipo
abstrato de dados
 Diferentes implementações podem ser
feitas para acomodar as diversas classes
de origem comum com a mesma interface

20
Containers (1)
Um container é um objeto que comporta outros
objetos
Propriedades dos Containers



Capacidade
Lotação
Possibilidade de inserção e remoção de objetos
Um caso particular é constituído pelos containers
de busca (searchable containers) que são aqueles
que suportam operações eficientes de busca de
objetos nele contidos
21
Containers (2)
Enumerations e Iterators
Visitors
Cursors (não em C++)
Adapters
Singletons
22
Hierarquias de Objetos e Padrões
de Projeto
Conceitos iniciais
Abstração
Encapsulamento
23
Conceitos iniciais
Os padrões de projeto e as hierarquias de classe são
um salto qualitativo no desenvolvimento de
“software” mas suas vantagens são semelhantes às
das linhas de montagem da indústria
Para grande volume de produção e grande volume
de pessoas envolvidas no empreendimento são
indispensáveis

Contudo apresentam seus custos de preparação e
manutenção que só se justificam para casos específicos
com alta taxa de reuso
Para os não iniciados parecem complicações
assustadoras e “desnecessárias”
24
Abstração
Mecanismo de minimização de detalhes
pouco relevantes permitindo o raciocínio
dirigido
Abstração de procedimentos

ações que devam ser executadas para resolver o
problema sem pensar em como essas ações
devam ser implementadas
Abstração de dados

objetos de um programa ou sistema sem a
preocupação de sua implementação
25
Encapsulamento
São omitidas informações sobre detalhes de
implementação
Objetos encapsulam dados e procedimentos
Independência
Conceitual: o usuário não pode interferir com a
implementação do objeto sendo obrigado a usálo pelas regras ditadas pelo criador do objeto
 Física: as operações sobre os objetos não
provocam efeitos colaterais

26
Tipos Abstratos de Dados Java
Tipos Abstratos de Dados Java
Conceito
Padrões de Projeto
28
Tipos de variáveis e tipos de dados
O tipo de uma variável especifica dois conjuntos:


um conjunto de valores
um conjunto de operações
Pode-se considerar o tipo de uma variável um tipo
abstrato de dados no sentido de que pode-se
estudar as qualidades do tipo sem levar em conta a
realidade de sua representação
Não é necessário saber como é a representação
computacional de um tipo inteiro ou real para
poder raciocinar sobre ele
29
Tipos e Abstrações
No projeto de programas orientados a objeto
as primeiras considerações do programador
consistem em desenvolver


uma coleção adequada de abstrações para tratar
do problema
definir tipos abstratos de dados para representar
estas abstrações
A definição de um tipo abstrato de dados
requer as especificações de um conjunto de
valores e de um conjunto de operações sobre
esses valores
30
Abstrações e a Orientação a Objeto
Só com o advento da Orientação a
Objeto é que surgiram linguagens de
programação que forneceram as
ferramentas que permitiram declarar de
maneira adequada os tipos abstratos de
dados
31
Padrões de projeto
Hierarquia de Classes e convenções
32
Hierarquia de Classes do
Framework Java de Bruno
Preiss
33
Padrões de Projeto
Hierarquia de Classes
Objetos Java e a interface Comparable
Objetos abstratos comparáveis
Envoltória dos tipos primitivos
Containers
Containers abstratos
Visitantes
O método toString da classe AbstractContainer
Enumerações
Containers de Busca (Searchable Containers)
Associações
34
Tipos Abstratos de Dados C++
Tipos Abstratos de Dados C++
Conceito
Padrões de Projeto
36
Tipos de variáveis e tipos de dados
O tipo de uma variável especifica dois conjuntos:


um conjunto de valores
um conjunto de operações
Pode-se considerar o tipo de uma variável um tipo
abstrato de dados no sentido de que pode-se
estudar as qualidades do tipo sem levar em conta a
realidade de sua representação
Não é necessário saber como é a representação
computacional de um tipo inteiro ou real para
poder raciocinar sobre ele
37
Tipos e Abstrações
No projeto de programas orientados a objeto
as primeiras considerações do programador
consistem em desenvolver


uma coleção adequada de abstrações para tratar
do problema
definir tipos abstratos de dados para representar
estas abstrações
A definição de um tipo abstrato de dados
requer as especificações de um conjunto de
valores e de um conjunto de operações sobre
esses valores
38
Abstrações e a Orientação a Objeto
Só com o advento da Orientação a
Objeto é que surgiram linguagens de
programação que forneceram as
ferramentas que permitiram declarar de
maneira adequada os tipos abstratos de
dados
39
Hierarquia de Classes do
Framework C++ de Bruno
Preiss
40
Padrões de Projeto
Hierarquia de Classes
Objetos
A classe Singleton NullObject
Object Wrappers para os tipos embutidos
Containes
Visitors
Iterators
A classe NullIterator
Conteúdo Direto e Indireto
Associações
Containers de Busca (Searchable Containers)
41
Application Frameworks
Application Frameworks
Conceito de Framework
Application Framework
Application Framework de Bruno Preiss
43
Conceitos de Framework (1)
No desenvolvimento de software, um
Framework é uma estrutura de suporte
bem definida na qual um projeto do
software pode ser baseado e
desenvolvido.
Um Framework pode incluir programas
de apoio, bibliotecas de código,
linguagens de script e outros softwares
para ajudar a desenvolver e juntar
diferentes componentes do seu projeto
44
Conceitos de Framework (2)
Uma estrutura lógica para a
classificação e organização de
informação complexa
A estrutura técnica e formato
sistemático que suporta os
conceitos de metadados, conteúdo
e vocabulário controlado
45
Conceitos de Framework (3)
Uma estrutura extensível para a
descrição de um conjunto de conceitos,
métodos, tecnologias e mudanças
culturais necessárias para o projeto
completo de um produto e processo de
manufatura
Um conjunto de classes cooperativas
que constitui um projeto re-usável para
uma aplicação específica
46
Conceitos de Framework (4)
Uma coleção de classes que
fornece um conjunto de serviços
para um domínio particular
Um conjunto de classes inter
relacionado e re-usável que forma
a base de uma aplicação
47
Application Framework (1)
Conjunto de bibliotecas (coleções
de sub programas utilizadas para o
desenvolvimento de “software”) ou
classes (coleções de tipos
encapsulados de variáveis e tipos
de métodos) usadas para
implementar a estrutura padrão de
uma aplicação para um dado
sistema operacional
48
Application Framework (2)
A vantagem de seu emprego é o
agrupamento de grande quantidade de
código re-usável o que economiza o
esforço de reescrever código padrão a
cada nova aplicação. Os application
frameworks apresentaram grande
popularidade com o advento das
interfaces gráficas para o usuário (GUI)
49
Application Framework (3)
A implementação dos application
frameworks
é
feita
por
programação orientada a objeto e
assim o código específico de cada
aplicação pode utilizar a herança
das
classes
existentes
no
application framework.
50
Application Frameworks Disponíveis
Microsoft

Microsoft Foundation Classes (MFC) de 1992
inspirado no Think Class Library (TCL) do Macintosh
Borland

Object Windows Library (OWL) que deu lugar a
Visual Component Library (VCL)
Java



Abstract Window Toolkit (AWT) para GUI 1995
Java Foundation Classes (JFC) 1997
Incorporação às JFC da interface Swing inspirada na
Internet Foundation Classes, da Netscape 1998
51
Application Framework de Bruno Preiss (1)
Criar Projetos com a seguinte
composição:
1.
2.
3.
4.
Um
diretório
(ou
“package”)
com
estruturas dos fundamentos da hierarquia
de classes e padrões de projeto
Um diretório (ou “package”) com as
estruturas de dados a utilizar (pilha, fila,
lista, árvore, grafo, etc.)
Um diretório com a definição dos dados a
serem processados
Um diretório com a aplicação ou programa
principal
52
Application Framework de Bruno Preiss (2)
O diretório das estruturas dos fundamentos é
único e reaproveitado sempre
Os diretórios das estruturas de dados são um
para cada estrutura de dados escolhida
(podem ocorrer a implementação por “arrays”
e a implementação por listas encadeadas)
Para cada novo problema ou aplicação
basta fazer a definição dos dados e o
programa principal pois todo o resto já
está pronto
53
Application Framework de Bruno Preiss (3)
Os sítios de Bruno Preiss para
C++e Java, aonde estão
disponíveis os fontes, são,
respectivamente
http://www.pads.uwaterloo.ca/Bru
no.Preiss/books/opus4/programs/
http://www.pads.uwaterloo.ca/Bru
no.Preiss/books/opus5/programs/
54
Fontes Java de Bruno Preiss
Arquivo
Fonte de Bruno Preiss
LinkedList.java
pgm04_13.txt até pgm04_22.txt
Comparable.java
pgm05_01.txt
AbstractObject.java
pgm05_02.txt; pgm05_03.txt
Chr.java
pgm05_04.txt
Int.java
pgm05_05.txt; pgm08_01.txt
Dbl.java
pgm05_06.txt
Str.java
pgm05_07.txt
Container.java
pgm05_08.txt
AbstractContainer.java
Visitor.java
AbstractVisitor.java
Enumeration.java
SearchableContainer.java
AbstractSearchableContainer.java
Association.java
pgm05_09.txt; pgm05_12.txt; pgm08_04.txt
pgm05_10.txt
pgm05_11.txt
pgm05_13.txt
pgm05_14.txt
pgm05_15.txt
pgm05_16.txt; pgm05_17.txt; pgm05_18.txt
55
Fontes C++ de Bruno Preiss
Arquivo
Object.h
Object.cpp
NullObject.h
NullObject.cpp
Wrapper.h
Wrapper.cpp
Container.h
Container.cpp
Visitor.h
PutingVisitor.cpp
Iterator.h
Ownership.h
SearchableContainer.h
Array.h
LinkedList.h
HashTable.h
HashTable.cpp
Fonte de Bruno Preiss
pgm05_01.cpp
pgm05_02.cpp; pgm05_03.cpp
pgm05_04.cpp
pgm05_05.cpp
pgm05_06.cpp
pgm05_07.cpp
pgm05_09.cpp
pgm05_10.cpp
pgm05_11.cpp
pgm05_12.cpp
pgm05_13.cpp
pgm05_17.cpp
pgm05_21.cpp
pgm04_01.cpp
pgm04_09.cpp até pgm04_10.cpp
pgm08_07.cpp
pgm08_08.cpp
56
Projetos
Projetos
Conceito de Projeto
Projetos em Delphi
Projetos em Dev C++
Projetos em JCreator
Projetos em Visual C++
Projetos em VB
Projetos em JBuilder
58
Conceito de Projeto
Em ambientes de desenvolvimento
de programas chama-se de projeto
a um conjunto de arquivos e
recursos que é utilizado para
implementar uma aplicação
59
Projetos em Delphi
Todo o desenvolvimento de aplicações é feito em torno
de projetos. Ao se criar uma aplicação Delphi está
sendo criado um projeto. Um projeto é uma coleção de
arquivos que constitui uma aplicação. Alguns destes
arquivos são criados ao tempo de desenvolvimento
enquanto outros são gerados automaticamente quando
da compilação do código fonte
Arquivos de projeto tem a extensão dpr.

Contém diretrizes para a construção de uma aplicação ou
objeto compartilhado
Quando se compila um projeto não interessa aonde
residem os arquivos que compõe o projeto
60
Projetos em Dev C++
Um projeto pode ser considerado
como um container que é usado
para
armazenar
todos
os
elementos necessários para a
compilação de um programa
61
Projetos em JCreator
Antes da criação do primeiro arquivo
Java deve-se criar um projeto que será
associado ao arquivo de programa Java
No JCreator, os projetos são criados em
Workspaces. Quando se cria um
workspace, é criada uma pasta para o
armazenamento do novo projeto. Um
workspace
pode
conter
diversos
projetos
Os projetos precisam ter o mesmo
nome que o arquivo do programa
62
Projetos em Visual C++
Arquivos criados para um programa C++ são
organizados dentro de um Projeto C++ contido em um
workspace
Aplicações são desenvolvidas em um Workspace
Inicia-se a montagem de aplicações ou criando
simultaneamente um projeto e um workspace ou
criando um workspace e depois adicionando a ele
projeto(s)
O desenvolvimento Microsoft eMbedded C++ é
caracterizado hierarquicamente por workspace,
projetos, e subprojetos
Um workspace é um container para o desenvolvimento
de projetos
Quando se cria nova plataforma cria-se
simultaneamente um workspace
63
Projetos em VB
Um projeto é um grupo de arquivos
relacionados, usualmente todos os
arquivos
necessários
para
o
desenvolvimento de um componente de
software
Arquivos podem ser agrupados em um
projeto para a criação de subprojetos
Os projetos podem ser definidos de
qualquer maneira que faça sentido para
o usuário
64
Projetos em JBuilder
Qualquer trabalho em JBuilder é feito dentro
de um projeto
Um projeto JBuilder é uma estrutura
organizacional que contém todos os arquivos
necessários para executar a unidade de
trabalho definida, incluindo os diretórios nos
quais estão os arquivos e todos os caminhos,
definições e recursos necessários
O usuário é quem decide o que incluir no
projeto, que é uma entidade lógica e não física
Os arquivos de um projeto podem estar em
quaisquer pastas
65
Download