Re:Código Estruturado?

veio acredito q isto seja inviavel, o javaée orientado por natureza e ate compligado criar algo estruturado com ele, se vc realmente precisar seria mais facil criar em linguagem C e depois chamar o codigo pelo java.

everson_z:
veio acredito q isto seja inviavel, o javaée orientado por natureza e ate compligado criar algo estruturado com ele, se vc realmente precisar seria mais facil criar em linguagem C e depois chamar o codigo pelo java.

Complicado??? acho que não… java é uma linguagem que te permite programar de uma maneira orientada a objetos… mas se vc quiser programar estruturalmente que nem C não a problema algum…

Quando eu comecei a programar em java achava tudo muito bonito e ficava orgulhoso de programar Orientado a Objetos…

Com o passar do tempo fui aprendendo alguns Design Patterns e percebia que os programas eu eu fazia estava tão estruturados quanto programação C.

Às vezes usar java não é o mesmo que programar orientado a objeto

Possivelmente sim.

Se você for obrigado a resolver alguns problemas, principalmente relacionados com workflows e álgebra, pode ser que trabalhar proceduralmente (estruturado OO também é) seja a melhor escolha.

Duas coisas:

  1. Mais importante: Se você precisa disso talvez o problema seja utilizar a linguagem errada para o problema. Considere utilizar uma linguagem especializada para o que deseja fazer.

  2. Caso tenha que programar de maneira procedural em Java geralmente é melhor abstrair as funções em objetos utilizando Commands e Chain of Responsibility.

Everson,
Se você pegar os requisitos do seu sistema e perceber que existe uma seqüência de passos bem definidas para atingir um objetivo, na minha opinião é o caso de se programar estruturalmente. Pegue estes passos e tente extrair deles um “caso de uso”. Se a sua “conversão” for bem simples e direta, ou seja, se você conseguir mapear estes passos diretamente para um caso de uso, é mais uma evidência de que é melhor usar esta abordagem É o caso de sistemas que só fazem CRUD ou fazem muitos processamentos em lote, por exemplo.
A vantagem é que a modelagem do seu sistema vai ficar bem simples. A desvantagem é que você não pode usar os recursos da orientação a objetos (polimorfismo, encapsulamento, deixar o seu modelo mais expressivo, mais perto da realidade, mais “rico”, etc).

www.martinfowler.com/eaaCatalog/transactionScript.html

Acho que se está confundindo o conceito de “programação estruturada” com o conceito de “organização”.

Muita gente diz genericamente que pensar “organizadamente” é pensar “de forma estruturada”.

Pode ser que a pessoa que lhe esteja dizendo isso esteja pensando em organização - e organização se aplica a qualquer estilo de programação: funcional, genérica, orientada a objetos, estruturada etc, não no conceito de “programação estruturada” (em contraposição a “programação orientada a objetos”).

Programar “organizadamente” é realmente a melhor solução. Não quer dizer que você tenha de usar “programação estruturada”, que é um estilo de programação bastante antigo mas que é muito útil ainda hoje em dia. A verdadeira “programação orientada a objeto” é na verdade mais difícil de encontrar, mesmo em Java, que a programação estruturada.

Existem várias formas de se conceber a arquitetura de um projeto…

Martin Fowler descreve algumas como o modelo dominio, módulo tabela, roteiro de transações e por ai vai… Emboras as ultimas duas nao sigam a risca a OO, ainda assim vc está utilizando OO. e mais, Vai depender mto do tamanho e complexidade da aplicação.

É bom ser equilibrado “Nem matar coelho com canhão” e “Nem enfrentar um Leão com um canivetinho”…

programação procedural em java pra mim só entendo se for estatico.

:stuck_out_tongue:

Às vezes ocorre de você programar de forma procedural em java e isso não ser errado. Existem problemas que em forma procedural são muito mais fáceis de resolver. Ou às vezes tem um desempenho melhor (um excelente exemplo neste caso é a existência dos tipos primitivos). Às vezes é necessário fazer isso pra contornar alguma limitação de algum framework ou de alguma outra coisa.

Mas no geral, a programação puramente procedural no java deve ser evitada. Não é esse o objetivo da linguagem.

Eu realmente gostaria de conhecer alguns deles. E principalmente que justifiquem java.

A existência de tipos primitivos não faz de Java menos OO.

java só não é 100% OO por causa dos seus tipos primitivos… :stuck_out_tongue:

Na verdade, algumas classes que só contém métodos estáticos (ex: java.lang.System) e não correspondem a Factories ou a quaisquer outras coisas OO não são orientadas a objetos. São apenas um conjunto de funções procedurais.

Outras formas de não-OO em java são classes com baixíssima coesão (classe FazTudo), mas isso é um caso de programação ruim.

Alguns problemas matemáticos se encaixam nessa situação. Por exemplo:

public static double[] baskara(double a, double b, double c) {
    if (a == 0.0) throw new ArithmeticException("Não é uma função do segundo grau.");
    double delta = b * b - 4 * a * c;
    if (delta < 0.0) throw new ArithmeticException("Delta é negativo.");
    return new double[] {
        (-b + Math.sqrt(delta)) / (2 * a),
        (-b - Math.sqrt(delta)) / (2 * a)
    };
}

EDIT: Arrumando probleminha com o código.

Existe algum caso em que a melhor solução para desenvolver (com java) é de forma estruturada???

Eu nunca vi, mas semana me falaram isso e me pediram isso também!

:?:

A minha pergunta: Existe algum caso em que a melhor solução para desenvolver (com java) é de forma estruturada???

Vocês estão respondendo se é possível, mas pergunto se existe algum caso que esta seja a melhor solução

vlw