660 likes | 761 Views
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. Introdução. Introdução. Tipos Abstratos e Dados Tipos de Dados e Abstrações
E N D
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
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++
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
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
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
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
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)
Linguagem C++ • Passagem de parâmetros • Por valor • Por referência
Estruturas de Dados Fundamentais • Conceito • Implementação Java • A Classe Array • A Classe LinkedList • Implementação C++ • A Classe Array • A Classe LinkedList
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.
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
Projeto Orientado a Objetos • Conceitos iniciais • Containers • Hierarquias de Objetos e Padrões de Projeto (Frameworks)
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.
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
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.
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
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
Containers (2) • Enumerations e Iterators • Visitors • Cursors (não em C++) • Adapters • Singletons
Hierarquias de Objetos e Padrões de Projeto • Conceitos iniciais • Abstração • Encapsulamento
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”
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
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
Tipos Abstratos de Dados Java • Conceito • Padrões de Projeto
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
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
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
Padrões de projeto Hierarquia de Classes e convenções
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
Tipos Abstratos de Dados C++ • Conceito • Padrões de Projeto
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
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
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
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)
Application Frameworks • Conceito de Framework • Application Framework • Application Framework de Bruno Preiss
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
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
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
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
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
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)
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.