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?
DiskBrake extends Brake
OOP não é bom para um carro, porque no "mundo real" essa comunicação é implementada "por sinais de rede e protocolos de barramento" - como, comoDiskBrake 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.Respostas:
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.
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".
fonte
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.)
fonte
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:
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)
fonte
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.
fonte
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 é.
fonte
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.
fonte
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.
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte