SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Access diapositivos aula nº 1 e 2
Access diapositivos aula nº 1 e 2Access diapositivos aula nº 1 e 2
Access diapositivos aula nº 1 e 2
Filipa Cordeiro
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
danielrpgj30
 
08 modelo conceitual_fisico_logico_er
08 modelo conceitual_fisico_logico_er08 modelo conceitual_fisico_logico_er
08 modelo conceitual_fisico_logico_er
Walter Alves Pereira
 

Mais procurados (20)

Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NETArquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
Exercicios Resolvidos Série MIPS Embarcados
Exercicios Resolvidos Série MIPS EmbarcadosExercicios Resolvidos Série MIPS Embarcados
Exercicios Resolvidos Série MIPS Embarcados
 
Python 02
Python 02Python 02
Python 02
 
Aula 4 banco de dados
Aula 4   banco de dados Aula 4   banco de dados
Aula 4 banco de dados
 
Algoritmo - tipos de dados
Algoritmo - tipos de dadosAlgoritmo - tipos de dados
Algoritmo - tipos de dados
 
Access diapositivos aula nº 1 e 2
Access diapositivos aula nº 1 e 2Access diapositivos aula nº 1 e 2
Access diapositivos aula nº 1 e 2
 
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicionalICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
 
POO - Aula 04 - Introdução a classes e objetos
POO - Aula 04 - Introdução a classes e objetosPOO - Aula 04 - Introdução a classes e objetos
POO - Aula 04 - Introdução a classes e objetos
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Análise de correlação
Análise de correlaçãoAnálise de correlação
Análise de correlação
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
 
Data Warehouse - Modelagem
Data Warehouse - ModelagemData Warehouse - Modelagem
Data Warehouse - Modelagem
 
Análise de ferramentas para gestão de regras de negócio em sistemas de inform...
Análise de ferramentas para gestão de regras de negócio em sistemas de inform...Análise de ferramentas para gestão de regras de negócio em sistemas de inform...
Análise de ferramentas para gestão de regras de negócio em sistemas de inform...
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
 
POO - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)
POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)POO   - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)
POO - Unidade 2 (parte 1) - Diagrama de Classe - Associação (versão 2)
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
 
08 modelo conceitual_fisico_logico_er
08 modelo conceitual_fisico_logico_er08 modelo conceitual_fisico_logico_er
08 modelo conceitual_fisico_logico_er
 
[Curso Java Básico] Exercícios Aulas 11 12 13
[Curso Java Básico] Exercícios Aulas 11 12 13[Curso Java Básico] Exercícios Aulas 11 12 13
[Curso Java Básico] Exercícios Aulas 11 12 13
 

Semelhante a 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
 

Semelhante a 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
 

Mais de 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
 

Mais de 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
 

Último

Último (8)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
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
 
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
 
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 - 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
 
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
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 

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