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    grand...
   Módulos são integrados com o objetivo de atender    a um requisito   “Dividir e conquistar”                          ...
   A modularização consiste em decompor um    programa em uma série de subprogramas individuais.   Trata-se de um método...
   Planejar mais fácil   Manutenção   Testes e depuração   Ocultação de Informações   Módulos devem ser especificados...
   Modularidade + abstração + ocultação = Independência    Funcional    ◦ “Finalidade única” e menos interação    ◦ Inter...
   “Software reuse is the use of existing    software knowledge or artifacts to build new    software artifacts” [Frakes,...
   Código compilado [fonte]   Casos de testes   Modelos e projetos: frameworks e padrões   Interface de usuário   Pla...
   Aspectos de um componente    ◦ Descrever ou realizar uma função específica    ◦ Estar em conformidade e prover um conj...
   Reuso : A habilidade de reusar componentes    existentes para criar sistemas mais    complexos.   Evolução : Um siste...
   Programas Java são concebidos através da união de    classes e métodos criados pelo programador,    juntamente de clas...
   A API Java contém classes que permitem:    ◦   a realização de cálculos matemáticos simples;    ◦   manipulação de str...
   A API faz parte das JDK.   É importante, antes de criar algo novo, que se    verifique se a API já disponibiliza as o...
   Classes predefinidas agrupadas em    categorias de classes relacionadas –    pacotes   Uso de import:    ◦ import jav...
Pacote           Descriçãojava.applet      O Java Applet Package contém uma classe e várias interfaces exigidas           ...
Pacote           Descriçãojava.net         O Java Networking Package contém classes e interfaces que permitem aos         ...
   Refinamento    ◦ Processo de elaboração (alto nível -> mais detalhes)    ◦ Refinamentos sucessivos    ◦ (Abstração + r...
void imprimeDivida () {  Enumerate e = _pedidos.elementos ();  double divida = 0.0;  // imprime cabeçalho  System.out.prin...
void imprimeDivida () {  Enumerate e = _pedidos.elementos ();  double divida = 0.0;  imprimeCabecalho ();  // calcula dívi...
void imprimeDivida () {  Enumerate e = _pedidos.elementos ();  double divida = 0.0;  imprimeCabecalho ();  // calcula dívi...
void imprimeDivida () {  imprimeCabecalho ();  double divida = calculaDivida ();  imprimeDetalhes (divida);}double calcula...
void imprimeDivida () {  imprimeCabecalho ();  double divida = calculaDivida ();  imprimeDetalhes (divida);}double calcula...
Próximos SlideShares
Carregando em…5
×

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

3.353 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
3.353
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
114
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

  1. 1. Prof. Adriano Teixeira de Souza Modularização, componentização e reutilização de código
  2. 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. 3.  Módulos são integrados com o objetivo de atender a um requisito “Dividir e conquistar” Prof. Adriano Teixeira de Souza
  4. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 15. Pacote Descriçãojava.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. 16. Pacote Descriçãojava.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 oent tratamento de eventos (por exemplo, responder a cliques de botão) para componentes GUI no pacote javax.swing. Prof. Adriano Teixeira de Souza
  17. 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. 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. 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. 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. 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. 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

×