Your SlideShare is downloading. ×
  • Like
Paradigmas de Linguagens de Programação - Modularização, componentização e reutilização de código
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

  • 2,640 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,640
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
101
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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çã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. 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.  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