OOP é o modelo de programação dominante no mundo real?


20

Objetos Nunca? Bem, quase nunca

Na seção VIEWPOINT das Comunicações do ACM, encontrei um artigo interessante intitulado " Objetos Nunca? Bem, Quase Nunca ". É uma perspectiva radicalmente diferente da dos objetos - primeiro ou dos objetos - atrasados. Ele sugere "objetos-nunca" ou talvez "objetos-pós-graduação".

O autor falou sobre POO e fez uma pergunta sobre como o POO é usado em ambientes de programação do mundo real. Ele acha que OOP não é o modelo de programação dominante. Por exemplo, ele afirma, 70% das programações são feitas para sistemas embarcados onde o OOP não é realmente adequado.

Quando alguns professores das universidades querem falar sobre os benefícios do POO, eles falam sobre reutilização de código. Como outro exemplo, novamente, ele afirma, este não é o caso real no mundo real. a reutilização de código é mais difícil do que é reivindicado nas universidades:

Afirmo que o uso de OOP não é tão prevalecente quanto a maioria das pessoas acredita, que não é tão bem sucedido quanto seus proponentes afirmam e, portanto, que seu lugar central no currículo do CS não é justificado.

É interessante para mim saber como as pessoas no estouro de pilha pensam sobre isso? OOP é o modelo de programação dominante do ponto de vista dos programadores?

Se eu escolher / aprender / usar apenas uma abordagem, é POO ou não? porque?


26
"70% das programações são feitas para sistemas embarcados"? Isso é por projeto, por desenvolvedor ou por LOC? Tenho a sensação de que 70% de "todos os pré-jogos" são feitos no Excel. Até os não programadores programam planilhas.
LennyProgrammers

1
@ Lenny222: Se você quer meu palpite, 70% das cópias distribuídas de programas estão em software embarcado, ou algo assim. Agora, algumas coisas incorporadas são feitas em C ++, e geralmente uma versão hackeada que deixa C e objetos, por isso parece falso afirmar que a incorporação nunca é orientada a objetos.
David Thornley

9
Eu acho que o modelo de programação dominante tem sido e será a grande bola de barro.
Whatsisname

Esse artigo faz uma distinção bizarra entre "classes" e "subsistemas" que eu nem entendo remotamente. Ele fala sobre como o DiskBrake extends BrakeOOP não é bom para um carro, porque no "mundo real" essa comunicação é implementada "por sinais de rede e protocolos de barramento" - como, como DiskBrake implements BrakeInterface? Talvez seja minha própria experiência de << 43 anos, mas os exemplos para mim falham completamente em apoiar a afirmação do autor.
OJFord

2
O link está agora atrás de um paywall. De qualquer forma, o POO é quase sub-definido e superestimado. Mas vamos apenas dizer que "a maioria dos" novos programas lá fora estão propensos a ser escritos em alguma maneira OOP-esque Java-inspirado com getters e setters e classes nomeadas SessionManager
Charles Salvia

Respostas:


19

Na seção VIEWPOINT de Comunicações do ACM

Se você estiver interessado em programação prática , os procedimentos do ACM e os gostos são a última fonte que você deseja ler. Essas são frequentemente publicações científicas [pseudo] sem aplicação no mundo real. Muitas vezes, são opiniões pouco ortodoxas feitas para publicidade, para o escritor se diferenciar da multidão e promover sua própria pessoa.

Afirmo que o uso de OOP não é tão prevalecente quanto a maioria das pessoas acredita, que não é tão bem sucedido quanto seus proponentes afirmam e, portanto, que seu lugar central no currículo do CS não é justificado.

Costumo discordar do seu ponto de vista. OOP é amplamente difundido e funciona muito bem. Pelo número de projetos baseados em OOP, provavelmente, superaram os desenvolvimentos feitos com outras estratégias (vamos falar sobre o tempo moderno, 15 a 20 anos).

No entanto, OOP não é uma bala de prata. Funciona para alguns desenvolvimentos, não funciona para outros. Assim como qualquer outra abordagem.

Mas uma coisa que preciso mencionar é que um currículo deve comunicar conhecimento de diferentes abordagens. Se for baseado em OOP, está errado. Se for baseado em FP, está errado. Deve cobrir todos eles ou não abordar completamente esse tópico.

PS Por que se preocupar com o que é dominante e o que não é? Basta pegar o que é adequado para o projeto em mãos e deixar os números para "pesquisadores".


3
Eles são trabalhos de pesquisa em áreas de computação que ainda estão para se tornar mainstream. A academia leva muitos anos para se filtrar para o mundo real normalmente, embora isso aconteça regularmente.
Orbling

4
@DeveloperArt: Observe que o autor do artigo tem 43 anos de experiência em desenvolvimento de software!
Ehsan

6
Alan Kay acrescenta um comentário, em cacm.acm.org/magazines/2010/9/… - 'Por outro lado, eu nunca considerei que a maioria dos sistemas que se autodenominam "orientados a objetos" esteja próxima do meu significado quando cunhei originalmente o termo.' - que se vincula tangencialmente ao meu post - "OO? De quem OO?"
Frank Shearar

9
@ Art Developer: O que me irrita (um pouco) sobre o seu post é a parte "pesquisadores". Aqueles acadêmicos malditos. O que eles fizeram por nós? Oh Lambda cálculo, fechamentos, objetos, programação funcional, ... Mas outros do que isso, o que os acadêmicos fizeram por nós?
Frank Shearar

4
-1 Os pesquisadores de ciência da computação precisam de citações assustadoras? A ACM publica pseudo-ciência? A sério?
jprete

17

Se OOP é o único paradigma que você conhece, talvez deva aprender mais. Mas sério, o que realmente significa OOP? Isso significa Java ou C ++? Isso significa Smalltalk? Significa slots e fechamentos de valores configuráveis? (Olá, esquema!) Significa enviar mensagens? (Olá, Erlang!)

Em suma, parece uma pergunta desinteressante a ser feita. "OO é útil ?" é uma pergunta melhor. E, bem, parece que sim. (Certamente é para mim.)


6
+1 Suspeito que, na prática, OOP deixou de significar algo além de "uma boa maneira de escrever código que usa coisas chamadas objetos".
Larry Coleman

O artigo mencionado não considera que o uso de uma linguagem OO é uma garantia de uso e questiona se deve haver paradigmas, uma vez que eles não existem em outras disciplinas de engenharia.
JeffO

Talvez o autor deva ler William Cook e Matthias Felleisen, que passam muito tempo conversando sobre o que é e o que não é o mesmo em programação.
Frank Shearar

9

Onde estão todos os desenvolvedores fazendo esses "70% dos programas"? de todos os desenvolvedores que sei que menos de 1% estão trabalhando em sistemas embarcados.

Então, temos 3 opções:

  1. Sou único e todos os seus amigos realmente fazem programação incorporada
  2. Existem exércitos de desenvolvedores trancados em um porão em algum lugar fazendo aqueles 70%
  3. essa estatística é composta e o artigo é besteira

a menos que eu veja alguma evidência de que as opções 1 ou 2 sejam realmente verdadeiras, eu vou para a opção 3.

(BTW, eu não considero a programação incorporada de desenvolvimento móvel moderno, e o desenvolvimento móvel geralmente é OO, afinal a Apple o força a usar o * Objective * C para desenvolver para o iPhone)


FWIW, levei alguns segundos e criei meia dúzia de medidas possíveis para "70% das programações". O autor pode muito bem ter usado um sétimo. (Além disso, os programadores incorporados estão lá fora, eles só tendem a não sair nos mesmos lugares, e muitas vezes se consideram engenheiros elétricos ou algo assim, em vez de programadores.)
David Thornley

1
@ David Thornley - mentindo com estatísticas ainda está mentindo, o autor afirma claramente que a grande maioria da programação no mundo de hoje é para sistemas embarcados - e eu digo que isso é um total de touros # @ $ t, tenho certeza de que posso inventar um medida que mostra que a maioria das programações do mundo é feita na sala em que estou agora (que compartilho com apenas mais um desenvolvedor) - mas qualquer conclusão que construo sobre essa observação será tão inútil quanto a medida inventada .
Nir

1
Eu sou um cara incorporado. Vi vários relatórios de que cerca de 99% dos processadores produzidos / enviados são para sistemas embarcados (se for realmente necessário, posso voltar e citar o (s) relatório (s)). Dito isto, tenho certeza de que quase 70% de toda a programação é feita para sistemas embarcados. Eu acho que algo como 50% de todos os processadores enviados são de 4 e 8 bits, mas estes provavelmente representam 0,1% (ou menos) de toda a programação. Como David disse, existem muitas maneiras de criar "70% das programações". Eu não ficaria surpreso se o número fosse 20-25%.
Radian

+1 para "mentir com estatísticas ainda está mentindo"; tão verdadeiro, tão verdadeiro ...
Donal Fellows

8

Não tenho fatos para acompanhá-lo, mas OOP não é o modelo de programação dominante. Imagine todos os aplicativos internos desenvolvidos por alguém que fez um curso visual básico ou fez alguma programação de macro no Excel.

Muitas aplicações estão apenas fazendo programação imperativa, onde toda a lógica é empilhada em uma única classe ou exibição. Essa é provavelmente a grande maioria dos aplicativos internos simples, executados em todas as empresas.

Não há nada de errado nisso, existem várias maneiras de resolver o mesmo problema. Alguns são mais adequados que outros.

Além disso, como você apontou, OOP não é útil para todos os cenários. Existem outros modelos também.


Por outro lado, pode haver a pergunta que deve ser descrita como o modelo dominante. É "a quantidade de aplicativos desenvolvidos com o modelo X" ou "a quantidade de código desenvolvido com o modelo X"? De qualquer maneira, ainda acho que o POO não será o modelo dominante.
Morten

1
+1 Por apresentar o argumento de que, embora o POO possa estar quase onipresente com profissionais treinados, o setor em todo o mundo não reflete bem isso e há muitos códigos imperativos por aí.
Orbling

5

Quer o OOP seja ou não o modelo de programação dominante é irrelevante, basta colocar modelos diferentes em diferentes casos.

Não há bala de prata.

Moti Ben Ari está discutindo sobre uma afirmação acadêmica, que já não tem sentido. No entanto, ele afirma que nunca achou que o OOP "fazia sentido", claramente faz com milhares de desenvolvedores e engenheiros de software e foi usado em muitos sistemas ...

Mas, na verdade, o ponto da minha resposta é esta: de que adianta afirmar que um modelo ou outro é dominante ou não? É essa boa razão para usá-lo cegamente? Claro que não é.


Se muitas pessoas afirmam usar um modelo e não, isso é um problema. A questão é tão predominante quanto parece e não sobre ser dominante / melhor.
Jeffo

4

Esta é realmente uma pergunta difícil de responder de forma confiável. O maior motivo são pessoas como eu, que trabalham em aplicativos internos personalizados, em que o código nunca sai do nosso prédio. Nós usamos OO aqui? Eu não estou dizendo. Quantos outros programadores têm trabalhos similares? Eles também não estão dizendo. Temos sites de emprego, mas nem todos os trabalhos são publicados, e nem todos os trabalhos são para trabalhos reais, em oposição aos recrutadores que tentam reunir listas de nomes.

Mesmo se eu disser que usamos OO onde trabalho, isso significa a definição tradicional do artigo vinculado: Objetos, Classes, Herança? Ou significa que eu uso objetos principalmente como um meio de organizar o código? Ou significa que eu realmente apenas programa para interfaces e quase não uso herança? Ainda não estou dizendo, mas qual deles realmente conta como OO?

Nem sequer é significativo perguntar se o OO é útil até que as perguntas acima tenham sido respondidas, muito menos dominantes.


2

Claro que sim, porque é a última palavra da moda na qual a gerência se apegou. Também oferece melhor encapsulamento e abstração que a programação imperativa, então acho que o salto do oop para o que vem a seguir pode levar ainda mais tempo do que o imperativo do oop.

PS2: Se eu escolher / aprender / usar apenas uma abordagem, é POO ou não? porque?

Se você apenas aprender um, deve escolher um campo diferente.

Você deve aprender sobre tipos e encapsulamento e todos os outros benefícios do OOP e aprender como realizar essas mesmas coisas usando um estilo funcional de programação.


+1 no comentário sobre a escolha de um campo diferente se você planeja aprender uma abordagem. Isso é insano.
Mat Nadrofsky

1

OOP é definitivamente um dos modelos de programação mais dominantes no mundo real.

Vamos ser sinceros, mesmo as pessoas que projetam hardware digital, os próprios projetistas de chips, estão fazendo uma transição para a dupla SystemVerilog e SystemC. Estas são linguagens de programação orientadas a objetos.

Onde o POO não seria usado? Bem, se você está codificando drivers de dispositivo, é difícil imaginar por que você precisaria de programação genérica ou herança múltipla OU se você estiver usando técnicas de programação funcional da IA, isso facilitará muito a cabeça. Também existem muitas outras situações, basta dizer que o OOP é um lugar bastante poderoso para se estar em um mundo de programação oligopolista.


1

Eu diria que não.

Eu entendo que há uma enorme quantidade de código por aí que é escrito usando uma linguagem 'orientada a objetos', mas geralmente acho que o código é apenas processual, agrupado em classes. (não que isso seja necessariamente uma coisa ruim). O código que eu vi que está escrito para ser mais OO nessas linguagens tende a ser uma bagunça horrível de dependências entre classes que normalmente não pode ser mantida.

OO deveria ser sobre a passagem de mensagens entre objetos completamente independentes, e vemos isso no código de hoje, mas em um nível de granulação muito maior - ou seja, vemos esses objetos implementados como dlls ou assemblies ou objetos COM. 'Componentes' eu os ouvi descritos como.

então, acho que realmente não importa se o OO é usado ou não - se o código pode ser mantido durante sua vida útil, reutilizável na medida em que foi projetado para ser e rápido para desenvolver, então não me importo se for puramente processual ou orientado a semi-objeto ou totalmente OO. Duvido que alguém possa lhe dizer se o estilo predominante é algum deles, mas eu arriscaria adivinhar que o estilo processual será o mais comum, mesmo que seja dividido em classes em vez de funções.


0

Penso que é importante diferenciar uma solução, aplicando uma Abordagem Orientada a Objetos e uma solução implementada USANDO o Paradigma Orientado a Objetos. Minha opinião sobre um bom objeto ou software é combinar as duas soluções. Se você pensa em objetos e respeita as definições e interações, e o problema pode ser adaptado para usar essa estrutura, você terá um código flexível e robusto. Mas se você usar objetos para resolver um código usando um paradigma processual, terá uma mistura desagradável que não tirará vantagem dos profissionais de Objetos.

Eu realmente prefiro que meu código seja orientado a objetos, e percebi que, a princípio, poderia ser um pouco mais irritante criar uma boa estrutura, mas, ao lidar com os requisitos de flexibilidade e flash do cliente de hoje, acho que vale a pena. esforço.


0

Não pretendo saber os números exatos, nem mesmo fazer uma estimativa, mas há muitos projetos de programação que não envolvem OOP. Eu trabalho com robôs industriais. Os programas tendem a ser um código processual bastante simples e direto. O sistema operacional do robô é ainda mais.

Muitas de nossas "ferramentas" que usamos são baseadas em OOP, mas são executadas em PCs e não no controlador do robô. Isso inclui editores, simulações e utilitários.

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.