Código de Processo vs código OOP


19

Eu terminei um projeto em PHP de mais de 13000 linhas no Estilo de Procedimento [porque estou muito familiarizado com isso, embora conheça OOP], e o projeto está funcionando perfeitamente.

Mas devo convertê-lo para OOP? [ porque o mundo está ocupado com OOP ]

Meu código não precisa de nenhum recurso do OOP [encapsulamento, herança basicamente ...]!

Então, o que eu deveria fazer?

E que tipo de ajuda receberei se convertê-lo em OOP?


21
Por favor, mantenha-nos informados se você precisar alterar este projeto. Seria interessante saber se você está feliz por ter tomado essa decisão ou se arrepender.
Jeffo

2
Você precisa de encapsulamento. OO é uma maneira de obtê-lo; talvez você tenha outro que funcione para você, mas de uma forma ou de outra você precisa controlar as dependências do código.
Marcin

Que tal uma anedota para você: alguns anos atrás, trabalhei em um aplicativo Web de tamanho médio, escrito principalmente em JavaScript (não pergunte). O estilo de codificação era amplamente processual. Quando o projeto estava quase completo, fiquei insatisfeito com a forma como o código foi escrito e reescrevi uma parte significativa dele em OOP-JavaScript. Isso causou um atraso na conclusão do projeto e acabamos fazendo relativamente pouca manutenção no projeto posteriormente. Eu sempre me perguntei se tudo isso codificação valeu o esforço ;-)
Pandincus

sim valeu a pena. manter as portas da reutilização abertas sempre vale a pena.
Chani

1
A questão é: você espera mais desenvolvimento? A programação processual é a abordagem mais fácil e rápida quando você sabe EXATAMENTE o que precisa e não vai mudar. Qualquer alteração no código processual será dolorosa, no POO seria muito mais fácil.
Kamil Tomšík

Respostas:


52

Meu código não precisa de nenhum recurso do OOP

Você respondeu sua própria pergunta - se você não precisar de OOP nesse caso e seu projeto estiver funcionando, não o converta.

No entanto, você deve usar o OOP para o seu próximo projeto - mas apenas se for apropriado.

Não há nada intrinsecamente errado com a programação procedural - desde que seja usada no local apropriado.


2
+1 de concordar "você deve usar o OOP no seu próximo projeto".
Cary Chow #

11
+1 sim, se estiver funcionando corretamente, não corrija.
setzamora

4
Eu diria que, se estiver funcionando corretamente agora, não mude, mas você nunca sabe qual será o próximo pedido de recurso.
Jeffo

7
"você deve usar o OOP no seu próximo projeto", mas não o use a menos que faça sentido. Algumas coisas são melhor escritas processualmente, outras são mais adequadas para OOP. Use o que for apropriado.
TMN

@ TMN - está implícito - devo explicitar.
ChrisF

16

Não e não apenas porque você não precisa de POO.

Se o seu programa já estiver concluído e funcionando satisfatoriamente, em mais de 90% do tempo, é uma perda de tempo reescrever o código finalizado por qualquer motivo.

OOP não é tão poderoso; há muitos lugares onde o OOP não deve ser usado; portanto, não o use apenas porque OOP é a tendência.


1
Por "código finalizado", você quer dizer que funciona?
Jeffo

@ff Sim, senhor! é perfeito :)
Sourav

Ele disse que terminou o projeto e está funcionando perfeitamente. Para mim, isso significa que ele está pronto para ser entregue ao cliente ou foi entregue ao cliente, assumindo que existe um. Ao terminar, quero dizer testado e pronto para enviar, é claro que se os principais erros aparecerem, uma reescrita poderá entrar em ação.
Skeith 13/04

Por favor, descreva os "muitos lugares onde o POO não deve ser usado".
Falcon

3
@ Falcon, não importa o quão bem projetado seja o seu código OOP, mas se o domínio do problema em si estiver mal mapeado para o modelo OO, seu design OOP provavelmente será ruim. Existem muitos domínios com problemas que nunca devem ser expressos em termos de POO .
SK-logic,

8

Minha opinião geral sobre paradigmas (e por que nenhum dos três principais paradigmas é o caminho certo ou o caminho errado para programar):

A programação de procedimentos é boa quando você tem um problema simples em um nível alto (embora possa ser complexo em um nível baixo) e deseja escrever um código linear simples correspondente. É sem dúvida mais fácil escrever e entender do que OO e funcional se o problema não precisar de forte dissociação em qualquer lugar. Exemplos: código numérico, a maioria dos scripts pequenos e a maioria dos subproblemas pequenos, depois de dividir as coisas usando OO ou funcional.

O código orientado a objetos é bom quando você precisa desacoplar fortemente as preocupações, porque você pode ter mais de uma implementação de algumas preocupações. Exemplo: a maioria dos softwares corporativos. Você pode, por exemplo, querer desacoplar fortemente a lógica de negócios da lógica de apresentação, porque eles provavelmente precisarão mudar de forma independente.

A programação no estilo funcional é boa quando você precisa de uma forte separação entre mecanismo e política. Ter uma função de mecanismo que aceite uma função de política é um bom padrão. (Aprendi sobre isso examinando o módulo std.algorithm da linguagem de programação D ). Abstrair um estado mutável na fronteira entre código de política e mecanismo geralmente torna a API mais fácil de raciocinar. Se o estado mutável for usado privadamente em qualquer um, esse é um detalhe da implementação. A outra força da programação funcional é a simultaneidade, por razões evidentes.


Obrigado pela ótima resposta que descreve cada tipo de paradigma de programação e fornece exemplos de quando / como usá-los.
Kevin Peno

7

O código nunca "precisa de POO". São os programadores, na medida em que conseguem pensar em diferentes modos, que imaginam que esse ou aquele problema em particular "precisa" de $ PARADIGM ou é melhor resolvido dessa maneira.

Geralmente, os programadores que conhecem apenas um paradigma acham que seu paradigma é o maior. Um tamanho serve para todos, e todos devemos dormir na cama de Procrustes, se isso ou aquilo está na moda.


5

Você só deve converter seu projeto em OOP se houver uma indicação clara da necessidade de OOP. Os cenários possíveis em que isso pode ocorrer são (entre outros):

  • ampliando o projeto
  • adicionando mais desenvolvedores à equipe

e mesmo nesses cenários, talvez ainda não seja necessário converter seu projeto em OOP.


Bom ponto, mas você pode me dizer por que será um problema ampliar o projeto ou adicionar mais desenvolvedores à equipe, se for um código processual?
Sourav

A expansão do projeto pode envolver a adição de estruturas relacionais complexas ao modelo de aplicativo; nesse caso, pode ser rentável mudar para OOP. Se o aplicativo aumentar pouco a pouco e, a longo prazo, tornar-se mais fácil de entender ou entender no OOP, os novos desenvolvedores poderão "recuperar o atraso" mais rapidamente, se o código for OOP. Deixar para trás um legado de código não OO pode se tornar um problema mais tarde, quando o projeto aumentar. mais um daqueles casos em que 'as coisas são do jeito que são, porque eles só ficaram assim'
Timothy Groote

3
Foi exatamente isso que me ocorreu quando li a pergunta. ele diz que escreveu 13 mil linhas de código. Espero que não seja desperdiçado usando apenas uma vez. e se tiver que ser reutilizado, oop se tornará uma obrigação. caso contrário ele iria se tornar um pesadelo para os novos desenvolvedores
Chani

4

Ambos podem ser bons, ambos podem ser ruins. Mas adaptar um para se parecer com o outro nunca é uma boa ideia.


2

Se você pensar por que o OO foi inventado, verá que não precisa de OOP, mas às vezes isso facilita muito a sua vida.

Nos dias de codificação C, um programa muito grande poderia se tornar bastante confuso e difícil de continuar trabalhando. Então eles inventaram maneiras de dividi-lo em pedaços modulares. OOP adota essa abordagem e a torna ainda mais modular, colocando os dados com esses blocos da lógica do programa para que eles fiquem ainda mais separados do restante do código.

Isso permite que você escreva programas cada vez maiores, seguros de que você transformou seu enorme elefante de uma tarefa em uma centena de tarefas do tamanho de ratos. O bônus adicional é que você pode pegar alguns desses 'mouses' e reutilizá-los em outros programas!

É claro que o mundo real não é bem assim, e a reutilização de objetos nunca é tão bem-intencionada quanto foi planejada, mas isso não significa que seja um paradigma inútil.

O que é inútil é uma dependência excessiva de qualquer estilo de codificação. Qualquer pessoa que faça OO com milhares de classes pequenas e insignificantes não está realmente fazendo o certo - está criando um pesadelo de manutenção para si (ou para outra pessoa). Qualquer pessoa que escreva um aplicativo de procedimento com apenas três funções também está dificultando a vida. A melhor maneira é os objetos grandes e médios (às vezes chamados de componentes que parecíamos estar indo uma vez) que podem fornecer uma quantidade razoável de código e dados independentes com maior probabilidade de serem reutilizados isoladamente do resto do seu aplicativo.

Meu conselho para a próxima vez: tente escrever seu código de procedimento usual, mas crie um único objeto da sua estrutura de dados principal. Veja como você acha que trabalhar com isso é mais fácil do que passar dados de uma função para outra.


0

Meu código não precisa de nenhum recurso do OOP [encapsulamento, herança basicamente ...]!

Como você sabe disso?

Você precisa manter este projeto? Existem novos recursos planejados? Haverá outras pessoas que estarão desenvolvendo com você? Você se repetiu? O código é difícil de entender?

Se a resposta for "sim", talvez você deva começar a pensar em montar um esqueleto OOP e seguir esse caminho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.