ti-enxame.com

Os objetos foram entregues em termos de reutilização de código?

Muitas vezes ouvi dizer que os objetos não foram entregues em termos de reutilização de código. Você concorda? Se você acredita que não, por que não?

17
Casebash

Não, não necessariamente.

Os objetos oferecem melhor semântica, organização de código/funcionalidade e, possivelmente, facilidade de uso.

Bem projetado bibliotecas cumpre a promessa de reutilização de código, não objetos em si.

18
George Marian

Honestamente, não tenho certeza se "reutilização de código" é realmente o que alguém está procurando (ou pelo menos, deveria estar). Minha filosofia é "componentes de software", o que significa melhor manutenção através de boas interfaces e evitando acoplamentos desnecessários. A "reutilização de código" é uma das coisas que às vezes acontece - código duplicado desnecessariamente é um sinal de que você organizou as coisas da maneira errada e, claro, é difícil mantê-lo.

Para responder à pergunta um pouco mais diretamente, há uma coleção de ferramentas muito boas para evitar a repetição: herança, características, delegação, funções de ordem superior, etc. Destas, as pessoas tendem a confundir herança com OO como um todo - e eles também tendem a abusar um pouco, se você me perguntar. Talvez seja daí que venha parte da vibração "OO péssimo": encontrar herança presa onde não tem o direito natural de estar :)

7
hobbs

Não, "objetos" não tornaram a reutilização de código mais fácil ou mais comum. As mesmas preocupações que impedem o código de ser reutilizado em um programa modular (projetar, testar e documentar uma API de uso geral requer um esforço inicial consideravelmente maior do que escrever uma rotina única, e o pau para toda obra pode ser o master of none - a lógica destinada a ser reutilizada pode não ser bem otimizada para os usos para os quais é realmente colocada) se aplicam a programas OO, com a preocupação adicional de que um modelo de objeto mal projetado pode dificultar a reutilização de código reutilizável.

OO é uma abstração útil para muitos problemas, mas tenha cuidado com o hype dos anos 80-90: ele não resolve magicamente os problemas fundamentais do nosso comércio, assim como não faz waffles para você enquanto você dorme.

5
Shog9

Não espero que TODOS os objetos sejam reutilizados, mas temos muitos objetos que reutilizamos em muitos projetos diferentes. Também temos objetos que são reutilizados em um projeto. Freqüentemente, consumiremos os mesmos objetos de negócios (ou objetos de transferência de dados), bem como objetos de lógica de negócios de um aplicativo de desktop Click-Once, um aplicativo da web e um aplicativo de telefone, todos para o mesmo projeto.

Onde você ouviu que OO não entrega na reutilização? E qual foi o raciocínio? Talvez o design de seus objetos os tenha forçado a essa situação ...

5
Walter

Alguns programadores irão copiar e colar em qualquer linguagem e estilo.

Os programadores realmente bons podem evitar a maioria das tarefas de copiar e colar em quase qualquer idioma.

Acho que OO padrões tendem a encorajar a reutilização. Eu vi o código Java código que foi escrito em um estilo não OO (onde os dados foram separados do devido ao ORM de baixa qualidade) e a reutilização era realmente miserável - mas em OO os mesmos programadores fizeram um trabalho melhor no design (e na reutilização).

Também nos casos em que usamos padrões não-oo ou anti-padrões oo, como setters/getters, instruções switch, classes internas anônimas, funções enormes e coisas do gênero, eu vi a reutilização de código diminuir e aumentar o clichê ... significativamente.

ps. Eu sei que as pessoas terão problemas com o parágrafo anterior, então vou explicar um pouco.

Setters e getters causam OO problemas porque eles permitem que você opere nos membros de um objeto (um objeto deve manipular seus membros OWN) Isso distribui o código que opera em sua classe em outras classes que exigem você para copiar a funcionalidade em torno do setter/getter. Isso também se aplica às propriedades - só porque as propriedades são mais fáceis, isso não as torna "boas" em todas as situações.

O código nas classes internas Anonymous não pode ser reutilizado e as pessoas esquecem que muitas coisas (como ouvintes) podem e devem ser classes completas - isso também se aplica a encerramentos! Se você usou uma classe interna anônima para implementar algo como um ouvinte, é muito mais provável que apenas copie e cole sua implementação do que extraia o código em um método ou em sua própria classe e o chame. Os fechamentos também podem melhorar a reutilização - depende apenas de como você os usa.

Em muitos casos, os recursos disponíveis definem como você estrutura seu código. OO é ainda mais poderoso quando se trata de ajudá-lo a visualizar todo o seu código e como ele interage, mas essa é outra questão.

3
Bill K

Sim

OOP oferece mais maneiras de reutilizar o código

Não

não há bala de prata

Depende

sobre o que você colocou nele e o que você esperava em troca!

2
Steven A. Lowe

Os objetos não têm mais capacidade de fornecer reutilização de código do que um escalador de escadas ou outro equipamento de fitness pode fornecer perda de peso. Os desenvolvedores devem estar motivados para usar as ferramentas de maneira adequada.

Uma vez que as equipes de software valorizam mais a reutilização do código testado do que a manutenção de todos os detalhes em suas cabeças, você verá objetos e métodos muito mais refinados e, portanto, mais reutilização de código.

2
Huperniketes

Os objetos permitem a retomada do código, mas, como tal, não é a maior técnica para isso. Acho que a reutilização de código é promovida por meio de técnicas relacionadas a objetos, como herança, polimorfismo, sobrecarga e modelos.

1
Gaurav

Sim. Uma boa programação orientada a objetos promove separação de interesses, baixo acoplamento, alta coesão e ocultação de informações. Todas essas coisas são críticas para o código reutilizável.

Eu diria que o principal benefício de OOP é modularidade e modificabilidade, em vez de reutilizar, mas isso é outra questão.

1
Fishtoaster

Sim, eles fazem, a capacidade de estender (herdar) de uma superclasse contribui claramente para a reutilização de código, não tenho certeza de como alguém poderia argumentar o contrário. Você pode simplesmente estender uma classe e substituir um método, enquanto usa o resto da superclasse, se isso não estiver ajudando na reutilização do código, então eu não sei o que é

1
programmx10

Em caso afirmativo, eles cumpriram sua promessa de reutilização de código até agora? Sim, se os programas escritos com OOP em mente, aplicam os padrões de design com sabedoria. Caso contrário, principalmente não. Mas olhando para a popularidade de programas não triviais de grande escala que os sistemas Adobe, Google e similares escrevem com C++ ou Java ou outras linguagens OOP linguagens, eu diria OOP tem um longo caminho a percorrer antes de desaparecer. Esse tempo será muito mais adequado para fazer essa pergunta e poderá ajudar a fornecer o terreno para um novo paradigma.

0
vpit3833