SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Prof. Adriano Teixeira de Souza
         Modularização, componentização e
         reutilização de código
   Sistemas são feitos para resolver problemas do
    mundo real.

   Estudos mostram que a construção de sistemas
    grandes a partir de pequenas partes (módulos)
    permite um desenvolvimento mais rápido e com
    menor índice de erros – “DIVIDIR PARA
    CONQUISTAR”.

   Em Java há 3 tipos de módulos:
    ◦ métodos;
    ◦ classes;
    ◦ pacotes.

                          Prof. Adriano Teixeira de Souza
   Módulos são integrados com o objetivo de atender
    a um requisito

   “Dividir e conquistar”




                             Prof. Adriano Teixeira de Souza
   A modularização consiste em decompor um
    programa em uma série de subprogramas individuais.

   Trata-se de um método utilizado para facilitar a
    construção de grandes programas, através de sua
    divisão em pequenas etapas (dividir para conquistar),
    que são os módulos ou subprogramas;

   A primeira delas, por onde começa a execução do
    trabalho, recebe o nome de programa principal, e as
    outras são os subprogramas propriamente ditos, que
    são executados sempre que ocorre uma chamada dos
    mesmos, o que é feito através da especificação de
    seus nomes.


                            Prof. Adriano Teixeira de Souza
   Planejar mais fácil
   Manutenção
   Testes e depuração
   Ocultação de Informações
   Módulos devem ser especificados e projetados de
    tal modo que informações desnecessárias sejam
    inacessíveis
   Apenas o necessário é fornecido para a
    realização de funções
   Abstração + ocultação (erros não são
    propagados nas modificações)


                          Prof. Adriano Teixeira de Souza
   Modularidade + abstração + ocultação = Independência
    Funcional
    ◦ “Finalidade única” e menos interação
    ◦ Interfaces simplificadas
    ◦ Manutenção mais fácil
    ◦ Propagação de erros minimizada
    ◦ Reutilização
    ◦ Dois critérios (qualitativos) para avaliação

       COESÃO: robustez funcional de um módulo (módulo realiza
        uma única tarefa)

       ACOPLAMENTO: indicação da interdependência entre módulos


                                  Prof. Adriano Teixeira de Souza
   “Software reuse is the use of existing
    software knowledge or artifacts to build new
    software artifacts” [Frakes, 1995]

   Vantagens (em POTENCIAL)
    ◦ MAIS Qualidade
    ◦ MENOS Tempo de desenvolvimento
    ◦ MENORES custos TOTAIS no ciclo de vida...
      implementação, testes... integração,
      documentação, manutenção... evolução...




                           Prof. Adriano Teixeira de Souza
   Código compilado [fonte]
   Casos de testes
   Modelos e projetos: frameworks e padrões
   Interface de usuário
   Planos, estratégias e regras arquiteturais
   ...




                        Prof. Adriano Teixeira de Souza
   Aspectos de um componente
    ◦ Descrever ou realizar uma função específica
    ◦ Estar em conformidade e prover um conjunto
      de interfaces definidas
    ◦ Ter uma documentação adequada
    ◦ Estar inserido no contexto de um modelo que
      oriente a composição deste componente com
      outros
   Categorias [Williams, 2001]
    ◦ Componentes GUI
    ◦ Componentes de Serviços
    ◦ Componentes do Domínio [Negócio]
                         Prof. Adriano Teixeira de Souza
   Reuso : A habilidade de reusar componentes
    existentes para criar sistemas mais
    complexos.

   Evolução : Um sistema altamente
    componentizado é de mais fácil manutenção.
    Em um sistema bem projetado, as alterações
    serão localizadas, e essas poderão ser feitas
    no sistema com pouco ou nenhum efeito nos
    componentes restantes.

                         Prof. Adriano Teixeira de Souza
   Programas Java são concebidos através da união de
    classes e métodos criados pelo programador,
    juntamente de classes e métodos disponibilizados
    em bibliotecas de classes Java, a API Java – Java
    Application Programming Interface –, e outras
    bibliotecas de classes criadas por outros
    programadores.

   As bibliotecas são utilizadas por meio do uso da
    instrução import.
    ◦ Ex: import java.util.*;




                                Prof. Adriano Teixeira de Souza
   A API Java contém classes que permitem:

    ◦   a realização de cálculos matemáticos simples;
    ◦   manipulação de strings;
    ◦   de caracteres;
    ◦   operações de entrada/saída;
    ◦   de bancos de dados;
    ◦   de rede;
    ◦   processamento de arquivos;
    ◦   tratamento de erros;
    ◦   etc.


                             Prof. Adriano Teixeira de Souza
   A API faz parte das JDK.
   É importante, antes de criar algo novo, que se
    verifique se a API já disponibiliza as operações
    (métodos) em suas classes para não se “reinventar
    a roda”.
   É possível obter informações a respeito da API Java
    por meio do uso de Javadocs.
   A reutilização de código é uma vantagem da
    Orientação a Objetos e para que isso possa ser
    feito, é importante que os métodos tenham tarefas
    muito bem definidas.



                           Prof. Adriano Teixeira de Souza
   Classes predefinidas agrupadas em
    categorias de classes relacionadas –
    pacotes

   Uso de import:
    ◦ import java.util.Scanner;
    ◦ import java.util.*;




                         Prof. Adriano Teixeira de Souza
Pacote           Descrição

java.applet      O Java Applet Package contém uma classe e várias interfaces exigidas
                 para criar applets Java — programas que executam nos navegadores da
                 Web.
java.awt         O Java Abstract Window Toolkit Package contém as classes e interfaces
                 exigidas para criar e manipular GUIs no Java 1.0 e 1.1. Nas versões atuais
                 do Java, os componentes GUI Swing dos pacotes javax.swing são
                 freqüentemente utilizados em seu lugar.
java.awt.event   O Java Abstract Window Toolkit Event Package contém classes e
                 interfaces que permitem o tratamento de eventos para componentes GUI
                 tanto nos pacotes java.awt como javax.swing.
java.io          O Java Input/Output Package contém classes e interfaces que permitem
                 aos programas gerar entrada e saída de dados.
java.lang        O Java Language Package contém classes e interfaces (discutidas por
                 todo esse texto) que são exigidas por muitos programas Java. Esse
                 pacote é importado pelo compilador para todos os programas, assim o
                 programador não precisa fazer isso.




                                           Prof. Adriano Teixeira de Souza
Pacote           Descrição

java.net         O Java Networking Package contém classes e interfaces que permitem aos
                 programas comunicar-se via redes de computadores, como a Internet.
java.text        O Java Text Package contém classes e interfaces que permitem aos
                 programas manipular números, datas, caracteres e strings. O pacote
                 fornece recursos de internacionalização que permitem a um programa
                 ser personalizado para um local específico (por exemplo, um programa
                 pode exibir strings em diferentes idiomas com base no país do usuário).
java.util        O Java Utilities Package contém classes utilitárias e interfaces que
                 permitem ações como manipulações de data e hora, processamento de
                 números aleatórios (classe Random), armazenamento e processamento
                 de grandes volumes de dados e a divisão de strings em parte menores
                 chamadas tokens (classe StringTokenizer).
javax.swing      O Java Swing GUI Components Package contém classes e interfaces para
                 componentes GUI Swing do Java que fornecem suporte para GUIs
                 portáveis.
javax.swing.ev   O Java Swing Event Package contém classes e interfaces que permitem o
ent              tratamento de eventos (por exemplo, responder a cliques de botão) para
                 componentes GUI no pacote javax.swing.




                                          Prof. Adriano Teixeira de Souza
   Refinamento
    ◦ Processo de elaboração (alto nível -> mais detalhes)

    ◦ Refinamentos sucessivos

    ◦ (Abstração + refinamentos): conceitos complementares

   Refatoração
    ◦ Reorganizar para simplificar o projeto sem alterar as
      funções e os comportamentos.

    ◦ O que pode ser refatorado?
       Redundância, elementos       não     utilizados,          algoritmos
        ineficientes, etc



                                Prof. Adriano Teixeira de Souza
void imprimeDivida () {
  Enumerate e = _pedidos.elementos ();
  double divida = 0.0;
  // imprime cabeçalho
  System.out.println (“***************************”);
  System.out.println (“*** Dívidas do Cliente ****”);
  System.out.println (“***************************”);
  // calcula dívidas
  while (e.temMaisElementos ()){
       Pedido cada = (Pedido) e.proximoElemento ();
       divida += cada.valor ();
   }
  // imprime detalhes
  System.out.println (“nome: ” + _nome);
  System.out.println (“divida total: ” + divida);
}




                               Prof. Adriano Teixeira de Souza
void imprimeDivida () {
  Enumerate e = _pedidos.elementos ();
  double divida = 0.0;
  imprimeCabecalho ();
  // calcula dívidas
  while (e.temMaisElementos ()){
       Pedido cada = (Pedido) e.proximoElemento ();
       divida += cada.valor ();
   }
  //imprime detalhes
  System.out.println(“nome: ” + _nome);
  System.out.println(“divida total: ” + divida);
}
void imprimeCabecalho () {
   System.out.println (“***************************”);
  System.out.println (“*** Dívidas do Cliente ****”);
  System.out.println (“***************************”);
}



                                 Prof. Adriano Teixeira de Souza
void imprimeDivida () {
  Enumerate e = _pedidos.elementos ();
  double divida = 0.0;
  imprimeCabecalho ();
  // calcula dívidas
  while (e.temMaisElementos ()){
       Pedido cada = (Pedido) e.proximoElemento ();
       divida += cada.valor ();
   }
  imprimeDetalhes (divida);
}

void imprimeDetalhes (double divida)
{
  System.out.println(“nome: ” + _nome);
  System.out.println(“divida total: ” + divida);
}



                               Prof. Adriano Teixeira de Souza
void imprimeDivida () {
  imprimeCabecalho ();
  double divida = calculaDivida ();
  imprimeDetalhes (divida);
}

double calculaDivida ()
{
  Enumerate e = _pedidos.elementos ();
  double divida = 0.0;
  while (e.temMaisElementos ()){
       Pedido cada = (Pedido) e.proximoElemento ();
       divida += cada.valor ();
   }
  return divida;
}


                               Prof. Adriano Teixeira de Souza
void imprimeDivida () {
  imprimeCabecalho ();
  double divida = calculaDivida ();
  imprimeDetalhes (divida);
}

double calculaDivida ()
{
  Enumerate e = _pedidos.elementos ();
  double resultado = 0.0;
  while (e.temMaisElementos ()){
       Pedido cada = (Pedido) e.proximoElemento ();
       resultado += cada.valor ();
   }
  return resultado;
}




                               Prof. Adriano Teixeira de Souza

Weitere ähnliche Inhalte

Was ist angesagt?

Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
ejdn1
 
Diagramas de casos de uso
Diagramas de casos de usoDiagramas de casos de uso
Diagramas de casos de uso
Sergio Chaves
 

Was ist angesagt? (20)

Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcação
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01
 
Aula 1 - Revisão UML
Aula 1 - Revisão UMLAula 1 - Revisão UML
Aula 1 - Revisão UML
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Modelagem de Dados - Introdução à UML
Modelagem de Dados - Introdução à UMLModelagem de Dados - Introdução à UML
Modelagem de Dados - Introdução à UML
 
Excel lista de exercicios básicos
Excel   lista de exercicios básicosExcel   lista de exercicios básicos
Excel lista de exercicios básicos
 
HTML - Listas, Estilos, Tabelas, Div, Span, Formulário
HTML -  Listas, Estilos, Tabelas, Div, Span, FormulárioHTML -  Listas, Estilos, Tabelas, Div, Span, Formulário
HTML - Listas, Estilos, Tabelas, Div, Span, Formulário
 
Estrutura de repetição
Estrutura de repetiçãoEstrutura de repetição
Estrutura de repetição
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidor
 
Diagramas de casos de uso
Diagramas de casos de usoDiagramas de casos de uso
Diagramas de casos de uso
 
Aula 06 - Diagrama de classes
Aula 06 - Diagrama de classesAula 06 - Diagrama de classes
Aula 06 - Diagrama de classes
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Caso De Uso
Caso De UsoCaso De Uso
Caso De Uso
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 

Ähnlich wie Paradigmas de Linguagens de Programação - Modularização, componentização e reutilização de código

Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
Adriano Teixeira de Souza
 

Ähnlich wie Paradigmas de Linguagens de Programação - Modularização, componentização e reutilização de código (20)

Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetos
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015
 
001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma java
 
lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Merlinferramentassbc2006 Revisado Em6paginas
Merlinferramentassbc2006 Revisado Em6paginasMerlinferramentassbc2006 Revisado Em6paginas
Merlinferramentassbc2006 Revisado Em6paginas
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Programação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaProgramação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com Java
 
java
javajava
java
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Sistemas Distribuidos Java
Sistemas Distribuidos JavaSistemas Distribuidos Java
Sistemas Distribuidos Java
 
Linguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY NetworksLinguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY Networks
 
Minicurso Java
Minicurso JavaMinicurso Java
Minicurso Java
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 

Mehr von Adriano Teixeira de Souza

Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
Adriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Adriano Teixeira de Souza
 

Mehr von Adriano Teixeira de Souza (20)

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 

Kürzlich hochgeladen

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Kürzlich hochgeladen (6)

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Paradigmas de Linguagens de Programação - Modularização, componentização e reutilização de código

  • 1. Prof. Adriano Teixeira de Souza Modularização, componentização e reutilização de código
  • 2. Sistemas são feitos para resolver problemas do mundo real.  Estudos mostram que a construção de sistemas grandes a partir de pequenas partes (módulos) permite um desenvolvimento mais rápido e com menor índice de erros – “DIVIDIR PARA CONQUISTAR”.  Em Java há 3 tipos de módulos: ◦ métodos; ◦ classes; ◦ pacotes. Prof. Adriano Teixeira de Souza
  • 3. Módulos são integrados com o objetivo de atender a um requisito  “Dividir e conquistar” Prof. Adriano Teixeira de Souza
  • 4. A modularização consiste em decompor um programa em uma série de subprogramas individuais.  Trata-se de um método utilizado para facilitar a construção de grandes programas, através de sua divisão em pequenas etapas (dividir para conquistar), que são os módulos ou subprogramas;  A primeira delas, por onde começa a execução do trabalho, recebe o nome de programa principal, e as outras são os subprogramas propriamente ditos, que são executados sempre que ocorre uma chamada dos mesmos, o que é feito através da especificação de seus nomes. Prof. Adriano Teixeira de Souza
  • 5. Planejar mais fácil  Manutenção  Testes e depuração  Ocultação de Informações  Módulos devem ser especificados e projetados de tal modo que informações desnecessárias sejam inacessíveis  Apenas o necessário é fornecido para a realização de funções  Abstração + ocultação (erros não são propagados nas modificações) Prof. Adriano Teixeira de Souza
  • 6. Modularidade + abstração + ocultação = Independência Funcional ◦ “Finalidade única” e menos interação ◦ Interfaces simplificadas ◦ Manutenção mais fácil ◦ Propagação de erros minimizada ◦ Reutilização ◦ Dois critérios (qualitativos) para avaliação  COESÃO: robustez funcional de um módulo (módulo realiza uma única tarefa)  ACOPLAMENTO: indicação da interdependência entre módulos Prof. Adriano Teixeira de Souza
  • 7. “Software reuse is the use of existing software knowledge or artifacts to build new software artifacts” [Frakes, 1995]  Vantagens (em POTENCIAL) ◦ MAIS Qualidade ◦ MENOS Tempo de desenvolvimento ◦ MENORES custos TOTAIS no ciclo de vida... implementação, testes... integração, documentação, manutenção... evolução... Prof. Adriano Teixeira de Souza
  • 8. Código compilado [fonte]  Casos de testes  Modelos e projetos: frameworks e padrões  Interface de usuário  Planos, estratégias e regras arquiteturais  ... Prof. Adriano Teixeira de Souza
  • 9. Aspectos de um componente ◦ Descrever ou realizar uma função específica ◦ Estar em conformidade e prover um conjunto de interfaces definidas ◦ Ter uma documentação adequada ◦ Estar inserido no contexto de um modelo que oriente a composição deste componente com outros  Categorias [Williams, 2001] ◦ Componentes GUI ◦ Componentes de Serviços ◦ Componentes do Domínio [Negócio] Prof. Adriano Teixeira de Souza
  • 10. Reuso : A habilidade de reusar componentes existentes para criar sistemas mais complexos.  Evolução : Um sistema altamente componentizado é de mais fácil manutenção. Em um sistema bem projetado, as alterações serão localizadas, e essas poderão ser feitas no sistema com pouco ou nenhum efeito nos componentes restantes. Prof. Adriano Teixeira de Souza
  • 11. Programas Java são concebidos através da união de classes e métodos criados pelo programador, juntamente de classes e métodos disponibilizados em bibliotecas de classes Java, a API Java – Java Application Programming Interface –, e outras bibliotecas de classes criadas por outros programadores.  As bibliotecas são utilizadas por meio do uso da instrução import. ◦ Ex: import java.util.*; Prof. Adriano Teixeira de Souza
  • 12. A API Java contém classes que permitem: ◦ a realização de cálculos matemáticos simples; ◦ manipulação de strings; ◦ de caracteres; ◦ operações de entrada/saída; ◦ de bancos de dados; ◦ de rede; ◦ processamento de arquivos; ◦ tratamento de erros; ◦ etc. Prof. Adriano Teixeira de Souza
  • 13. A API faz parte das JDK.  É importante, antes de criar algo novo, que se verifique se a API já disponibiliza as operações (métodos) em suas classes para não se “reinventar a roda”.  É possível obter informações a respeito da API Java por meio do uso de Javadocs.  A reutilização de código é uma vantagem da Orientação a Objetos e para que isso possa ser feito, é importante que os métodos tenham tarefas muito bem definidas. Prof. Adriano Teixeira de Souza
  • 14. Classes predefinidas agrupadas em categorias de classes relacionadas – pacotes  Uso de import: ◦ import java.util.Scanner; ◦ import java.util.*; Prof. Adriano Teixeira de Souza
  • 15. Pacote Descrição java.applet O Java Applet Package contém uma classe e várias interfaces exigidas para criar applets Java — programas que executam nos navegadores da Web. java.awt O Java Abstract Window Toolkit Package contém as classes e interfaces exigidas para criar e manipular GUIs no Java 1.0 e 1.1. Nas versões atuais do Java, os componentes GUI Swing dos pacotes javax.swing são freqüentemente utilizados em seu lugar. java.awt.event O Java Abstract Window Toolkit Event Package contém classes e interfaces que permitem o tratamento de eventos para componentes GUI tanto nos pacotes java.awt como javax.swing. java.io O Java Input/Output Package contém classes e interfaces que permitem aos programas gerar entrada e saída de dados. java.lang O Java Language Package contém classes e interfaces (discutidas por todo esse texto) que são exigidas por muitos programas Java. Esse pacote é importado pelo compilador para todos os programas, assim o programador não precisa fazer isso. Prof. Adriano Teixeira de Souza
  • 16. Pacote Descrição java.net O Java Networking Package contém classes e interfaces que permitem aos programas comunicar-se via redes de computadores, como a Internet. java.text O Java Text Package contém classes e interfaces que permitem aos programas manipular números, datas, caracteres e strings. O pacote fornece recursos de internacionalização que permitem a um programa ser personalizado para um local específico (por exemplo, um programa pode exibir strings em diferentes idiomas com base no país do usuário). java.util O Java Utilities Package contém classes utilitárias e interfaces que permitem ações como manipulações de data e hora, processamento de números aleatórios (classe Random), armazenamento e processamento de grandes volumes de dados e a divisão de strings em parte menores chamadas tokens (classe StringTokenizer). javax.swing O Java Swing GUI Components Package contém classes e interfaces para componentes GUI Swing do Java que fornecem suporte para GUIs portáveis. javax.swing.ev O Java Swing Event Package contém classes e interfaces que permitem o ent tratamento de eventos (por exemplo, responder a cliques de botão) para componentes GUI no pacote javax.swing. Prof. Adriano Teixeira de Souza
  • 17. Refinamento ◦ Processo de elaboração (alto nível -> mais detalhes) ◦ Refinamentos sucessivos ◦ (Abstração + refinamentos): conceitos complementares  Refatoração ◦ Reorganizar para simplificar o projeto sem alterar as funções e os comportamentos. ◦ O que pode ser refatorado?  Redundância, elementos não utilizados, algoritmos ineficientes, etc Prof. Adriano Teixeira de Souza
  • 18. void imprimeDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; // imprime cabeçalho System.out.println (“***************************”); System.out.println (“*** Dívidas do Cliente ****”); System.out.println (“***************************”); // calcula dívidas while (e.temMaisElementos ()){ Pedido cada = (Pedido) e.proximoElemento (); divida += cada.valor (); } // imprime detalhes System.out.println (“nome: ” + _nome); System.out.println (“divida total: ” + divida); } Prof. Adriano Teixeira de Souza
  • 19. void imprimeDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; imprimeCabecalho (); // calcula dívidas while (e.temMaisElementos ()){ Pedido cada = (Pedido) e.proximoElemento (); divida += cada.valor (); } //imprime detalhes System.out.println(“nome: ” + _nome); System.out.println(“divida total: ” + divida); } void imprimeCabecalho () { System.out.println (“***************************”); System.out.println (“*** Dívidas do Cliente ****”); System.out.println (“***************************”); } Prof. Adriano Teixeira de Souza
  • 20. void imprimeDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; imprimeCabecalho (); // calcula dívidas while (e.temMaisElementos ()){ Pedido cada = (Pedido) e.proximoElemento (); divida += cada.valor (); } imprimeDetalhes (divida); } void imprimeDetalhes (double divida) { System.out.println(“nome: ” + _nome); System.out.println(“divida total: ” + divida); } Prof. Adriano Teixeira de Souza
  • 21. void imprimeDivida () { imprimeCabecalho (); double divida = calculaDivida (); imprimeDetalhes (divida); } double calculaDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; while (e.temMaisElementos ()){ Pedido cada = (Pedido) e.proximoElemento (); divida += cada.valor (); } return divida; } Prof. Adriano Teixeira de Souza
  • 22. void imprimeDivida () { imprimeCabecalho (); double divida = calculaDivida (); imprimeDetalhes (divida); } double calculaDivida () { Enumerate e = _pedidos.elementos (); double resultado = 0.0; while (e.temMaisElementos ()){ Pedido cada = (Pedido) e.proximoElemento (); resultado += cada.valor (); } return resultado; } Prof. Adriano Teixeira de Souza