De que se trata o artigo: Trata da solução de problemas que requerem o uso de orientação a objetos, utilizando uma proposta de metodologia básica que destaca principalmente a criação do modelo de domínio e recursos de orientação a objetos suportados por Java.


Em que situação o tema é útil:
Apenas conhecer uma ou mais linguagens de programação não é suficiente para resolver os problemas que o desenvolvedor enfrenta no seu dia a dia. Saber como resolver o problema é fundamental. E para isso, seguir alguns passos básicos pode determinar a eficiência da solução. Assim, esse artigo é útil para instrumentalizar os desenvolvedores tanto nos recursos da linguagem Java, quanto em uma forma de abordar problemas de programação.

Resumo DevMan: Para resolver um problema de programação com eficiência, devemos conhecer a linguagem de programação e as técnicas necessárias para analisar o seu domínio. Neste artigo voltamos a utilizar uma simples metodologia composta de quatro passos e aplicamos os recursos de Java, estudados até então nas edições anteriores de Easy Java Magazine. Especialmente, tratamos com mais profundidade problemas que envolvem orientação a objetos, tais como herança, interfaces e polimorfismo. As soluções são explicadas em detalhes, desde a modelagem até a codificação, de maneira que o desenvolvedor adquira conhecimento e experiência a serem utilizados em futuras situações que exijam abordagem semelhante.

Na Easy Java Magazine nº. 4 foi publicado o artigo Solucionando Problemas usando Java, onde propusemos uma metodologia mínima que pode ser adotada para resolver problemas de programação. Nessa mesma matéria foram apresentados alguns testes cujas soluções foram abordadas usando essa metodologia. O artigo que ora iniciamos irá apresentar mais alguns problemas e resolvê-los usando essa proposta de método. E para facilitar a leitura e o entendimento vamos rever brevemente a metodologia apresentada naquele artigo, que é composta de quatro passos:

  • Entenda o problema

    Este primeiro passo é fundamental, pois não se resolve um problema que não entendemos. Para isso, é primordial entender o domínio do problema – aquelas áreas que são importantes para solução, excluindo o que for irrelevante. Geralmente, o entendimento do domínio passa pela criação de um modelo, expressado pelo diagrama de classes.

    Se possível, tente resolver o problema manualmente

    Procure dividir o problema em pequenas partes, que possam ser executadas mentalmente usando papel e caneta. É o processo que comumente chamamos de teste de mesa.

  • Defina com precisão o algoritmo

    A utilização de pseudocódigo pode ser um caminho para esse passo. O pseudocódigo deve ser mapeado posteriormente para a linguagem de programação escolhida para o desenvolvimento. Geralmente, cria-se pseudocódigo para as pequenas partes nas quais o problema foi dividido no passo anterior.

  • Codifique o programa

    O último passo do processo é a codificação. Durante essa etapa procure escrever código mais legível, utilize identação e comentários, de forma a facilitar a depuração e manutenção posterior da aplicação.

Agora, vejamos então alguns problemas que abordam temas de Java e suas respectivas soluções que utilizam a metodologia proposta.

Classes e Objetos

Problema: Escreva uma classe chamada Conta que encapsula uma conta de banco e define três variáveis de instância, o titular (String) da conta, o saldo (double) e o limite (double). Além dos construtores e dos métodos getters e setters, escreva os métodos depositar() e sacar(). O método sacar() deve retornar um boolean. Se houver saldo suficiente para o saque, o método deve retornar true, caso contrário, deve retornar false. Escreva um programa para instanciar essa classe e fazer depósitos e saques para validar a solução.

Análise do problema: Este é um problema relativamente simples. O que deve ser observado na criação da classe é que o campo saldo não deve ser alterado através de um método setter, e sim por meio dos métodos depositar() e sacar(). A implementação desses dois métodos requer maior atenção, devido à presença do limite. O limite é um valor que o titular da conta pode sacar no caso de não possuir saldo suficiente. Vejamos então o que acontece quando fazemos um saque. Se a conta possui limite maior que 0, então o saldo da conta pode ficar negativo com o mesmo valor absoluto do limite. Dessa maneira pode-se escrever o pseudocódigo da Listagem 1, para realizar saques na conta.

Listagem 1. Pseudocódigo do método sacar.


funcao sacar(valor: real): lógico;
  declare
    resultado: lógico;
  inicio
    se (saldo + limite >= valor) então
      saldo := saldo – valor;
      resultado := true;
    senão
      resultado := false;
    fim-se;
  fim

Observe que a condição (saldo + limite >= valor) no pseudocódigo atende também a situação em que a conta possui limite igual a zero, pois nesta situação precisamos saber se apenas o saldo é suficiente para fazer o saque.

Por sua vez, o método depositar() é mais simples de implementar, necessitando apenas somar ao saldo o valor depositado. Assim, pode-se definir o pseudocódigo da ...

Quer ler esse conteúdo completo? Tenha acesso completo