1 of 27

Reuso de Software, Frameworks

Eduardo Piveta

2 of 27

Introdução

  • Paradoxo da indústria de software:
    • Programas mais complexos
    • Menor tempo de desenvolvimento
    • Menor custo possível
  • Necessidade de definir mecanismos para reuso de software

3 of 27

Reuso de software

  • Componentes: Primeira visão de reuso
  • Padrões de Projeto: Reuso de Projeto
  • Frameworks: Reuso de Projeto e Reuso de Código

Rotinas Classes Componentes Padrões Frameworks

4 of 27

Reuso de software

  • O uso de componentes visa aumentar o grau de reuso no desenvolvimento de software
  • Isto é feito através de dois processos:
    • Engenharia de domínio
    • Desenvolvimento baseado em componentes

5 of 27

Engenharia de domínio

  • Estudo de um domínio de aplicações:
    • Ambientes de desenvolvimento de software
    • Produção e gerenciamento de documentos
    • Gestão financeira
    • Automação de escritórios
    • Software para web
    • Jogos de tabuleiros

6 of 27

Engenharia de domínio

  • Visa:
    • Reusar conhecimento acerca do domínio
    • Produzir uma especificação adequada a um conjunto de aplicações
    • Reutilizar esta especificação no desenvolvimento de diferentes aplicações
  • A engenharia de domínio é utilizada para a construção de frameworks e componentes

7 of 27

Frameworks

  • Características:
    • Projeto em larga escala que descreve como um sistema é decomposto em um conjunto de objetos que interagem
    • Representado como um conjunto de classes abstratas e a maneira como elas interagem
    • Utilizam inversão de controle
    • Utilizam padrões de projeto e componentes

8 of 27

Frameworks

  • Estrutura de Classes
    • OO
  • Implementação Inacabada

9 of 27

Aplicação OO completamente Desenvolvida

10 of 27

Reutilização de Classes

11 of 27

Aplicação baseada em framework

12 of 27

Frameworks

  • Frameworks são uma técnica de reuso de software
  • Definição:
    • Projeto reutilizável de parte de um sistema, representado por um conjunto de classes abstratas e seu inter-relacionamento (estrutura)
    • Esqueleto de uma aplicação que pode ser customizado pelo desenvolvedor (propósito)

13 of 27

Motivações para o uso de frameworks e reuso

  • Principal: Economizar tempo e dinheiro no desenvolvimento de software
  • Uniformidade
  • Construção de Sistemas Abertos
  • Combinação de Softwares Diferentes
  • Linguagens OO: Frameworks para interfaces gráficas

14 of 27

O que é um Framework?

  • Classes Abstratas
    • Classes sem instâncias, são usadas como superclasses
    • Classes abstratas protelam a implementação de alguns de seus métodos para suas subclasses
    • São utilizadas como modelos para a criação de classes
  • Frameworks utilizam classes abstratas como projeto para seus componentes

15 of 27

Classes abstratas

  • Classes abstratas definem uma interface para suas subclasses
  • Clientes das subclasses da classe abstrata precisam de uma classe que implemente a interface da classes abstrata
  • Classes abstratas podem prover parte da implementação dos métodos:
    • Métodos Template

16 of 27

Métodos Template

  • Definem o esqueleto de um algoritmo de um método em uma classe abstrata, prorrogando passos da implementação, delegando-os para as subclasses
    • Métodos Hook
  • Subclasses concretas devem implementar os métodos abstratos providos pela classe abstrata

17 of 27

Frameworks

  • Projeto em larga escala que descreve como um sistema é decomposto em um conjunto de objetos que interagem entre si
  • Normalmente representado como um conjunto de classes abstratas e a maneira como elas interagem
  • Reuso de interface é mais importante que reuso de implementação

18 of 27

Frameworks

  • Tiram proveito das seguintes características das linguagens OO:
    • Abstrações
    • Polimorfismo
    • Herança
  • Usam também:
    • Anotações, Metadados, Reflexão

19 of 27

Inversão de controle

  • Normalmente usuários de componentes chamam os componentes sempre que necessário
    • sendo responsável pela estrutura e pelo fluxo de controle do programa
  • Ao utilizar frameworks o código do usuário é chamado pelo framework
    • O framework é responsável pela estrutura e pelo fluxo de controle do programa

20 of 27

Frameworks

  • Frameworks para vários domínios:
    • Aplicações em Geral
    • Persistência
    • Web
    • Interfaces gráficas
    • Sistemas Operacionais
    • Protocolos de Rede
    • ...

21 of 27

Frameworks

  • Frameworks reutilizam código porque tornam mais fácil o desenvolvimento de uma aplicação através de uma biblioteca de componentes existentes
  • Provêm uma interface padrão para o inter-relacionamento entre objetos
  • Frameworks reutilizam análise
    • Modelam um domínio de aplicação
    • Generalizam um domínio de aplicações

22 of 27

Domínio de aplicações

  • Família com características comuns
    • Jogos de tabuleiros
    • Ambientes de desenvolvimento de software
    • Produção e gerenciamento de documentos
    • Gestão financeira
    • Automação de escritórios
    • Software para web

23 of 27

Análise de domínio

  • Visa produzir uma especificação adequada a um conjunto de aplicações e reutilizá-la no desenvolvimento de diferentes aplicações
  • Processo de identificação e organização de conhecimento a respeito de uma classe de problemas…
    • ... para dar suporte à descrição e solução destes problemas.
  • Abordagens bottom-up vs. top-down

24 of 27

Alguns problemas com frameworks

  • Como são complexos e flexíveis, normalmente são difíceis de utilizar
  • Requerem melhor documentação
  • Requerem melhor treinamento
  • São mais difíceis de desenvolver
  • Dependentes de linguagem

25 of 27

Exemplos

  • Java:
    • Spring / Spring Boot (apps)
    • Quarkus (apps)
    • Micronaut (apps)
    • Vaadin (interfaces web)
    • JavaFX (interfaces desktop)
    • Hibernate (persistência)

https://chatgpt.com/share/69a90513-76a0-8001-b3b0-f895e3cc9347

26 of 27

Exemplos

  • Python:
    • Django (web/orm)
    • Flask (web minimalista)
    • TensorFlow (IA - ML)
    • PyTorch (IA - Deep Learning)

https://chatgpt.com/share/69a905fd-31ec-8001-93ce-7c0ec1e94de8

27 of 27

Exemplos

  • C#:
    • ASP.NET Core (apps)
    • Blazor (interfaces web)
    • WPF (interfaces desktop)
    • Unity (jogos)
    • Entity Framework (persistência)

https://chatgpt.com/share/69a90685-891c-8001-b767-fcaa9b4a4219