Não consigo pensar em um lugar melhor entre os irmãos SO para fazer essa pergunta. Originalmente, eu queria perguntar "O python é uma linguagem OO pura?" mas considerando problemas e algum tipo de desconforto que as pessoas experimentam ao tentar definir o termo, decidi começar por obter uma definição clara para o termo em si.
Seria bastante justo começar com a correspondência do Dr. Alan Kay, que cunhou o termo (observe a inspiração na analogia biológica para células ou outros objetos vivos).
Existem as seguintes maneiras de abordar a tarefa:
- Faça uma análise comparativa listando linguagens de programação que podem exibir (ou deixar de fazê-lo) certas propriedades únicas e suficientes para definir o termo (embora Smalltalk, Scala,
Javae assim por diante - sejam exemplos possíveis, mas o IMO dessa maneira não parece realmente completo nem frutífero ) - Dê uma definição formal (ou próxima a ela, por exemplo, em estilo mais acadêmico ou matemático).
- Dê uma definição filosófica que se baseie totalmente no contexto semântico da linguagem concreta ou em uma experiência de programação a priori (deve haver alguma chance de explicação bem-sucedida da comunidade).
Minha versão atual: "Se uma certa linguagem de programação ( formal ) que pode ( gramaticalmente ) diferenciar operações e operandos, bem como inferir sobre o tipo de cada operando, se esse tipo é um objeto (no sentido de POO) ou não, então chamamos essa linguagem é uma linguagem OO, desde que exista pelo menos um tipo nessa linguagem que seja um objeto. Por fim, se todos os tipos de linguagem também forem objetos, definimos que essa linguagem é uma linguagem OO pura (forte) ".
Gostaria de receber qualquer possível melhoria dele. Como você pode ver, acabei de tornar a definição dependente do termo "objeto" (geralmente totalmente referenciado como classe de objetos).
[EDITAR]
Além disso, eu uso (felizmente bem entendido) a noção de um tipo como nas linguagens digitadas. A programação de tipos de dados ou programação orientada a tipos não é apenas uma interpretação sintática (do texto do programa, ou seja, como tratar certos valores de literais e variáveis de dados - algo que evolui para a segurança de tipos), mas pode ser atribuída à gramática da linguagem e estudada de maneira formal (usando lógica matemática) como os chamados sistemas de tipos . Observe que exigir que um sistema de tipos específico tenha o chamado tipo universal é uma das maneiras de definir a pureza da linguagem OO (existem maneiras de expandir isso semanticamente).
NB
como responder :
- ajuda se você especificar um livro ou uma referência que suporte / explique sua compreensão de terminologia e conceitos (geralmente uma boa definição cobre ou faz referência a todos os conceitos dependentes, exceto os elementares).
- se possível, indique uma categoria recuada da sua resposta / definição, se não estiver claro o contrário (veja acima: 1 - por exemplo de linguagem, 2 - lógica matemática, 3 - descrição técnica e filosofia de programação)
- a classificação é importante (e também porque o termo OO puro é incluído no termo OO) ao responder tentar desmistificar elementos do paradigma OO de outras metodologias conhecidas (e de nenhuma maneira confundir / sobrepor-los, por exemplo, elementos tipicamente da programação modular podem ser cobertos / incorporada à programação OO): tente distinguir OOP de (incluindo ou fazer parte de) programação funcional, programação lógica (especialmente altamente especializada), tipos de dados Abstarct (ADT), modular, metaprogramação (genéricos e tempo de macroexpansão do LISP), Contratos (por exemplo, Eiffel), orientado a aspectos (AO), ( são claras as diferenças entre a classificação declarativa e a funcionalidade, bem como as definições históricas da estrutura de Dijkstra)
na dificuldade de fornecer uma definição formal : surpreendentemente, é muito fácil fornecer uma descrição matemática do OOP na forma de um determinado sistema lógico (formal) (provavelmente baseado no tipo) e definir um conceito após o outro. Pode-se até tentar fazer algo mais prático aplicando esse formalismo a tipos de verificação de segurança ou aspectos de design de nova linguagem do que apenas entretenimento ou exercíciosabstratos(também procure formulação de OOP em Teoria Intuicionista de Tipos , tipos dependentes , independentemente, em formalismos FOL como cálculo lambda e apenas usando a teoria das categorias). Um ponto principal aqui é que sem surpresatais formulações IMO são fortemente tendenciosas (falhas) pelo entendimento provavelmente incompleto inicialmente de OOP (em engenharia da computação) e acabam sendo quase inacessíveis posteriormente (dificilmente contribuindo para trás no mundo da programação - talvez, exceto que certa porcentagem encontre aplicativos de volta ao mundo formal sendo integrado em idiomas populares ).
Então, sim, é difícil fornecer exatamente uma definição "boa", não apenas uma definição. Mas sou positivo em perguntar isso aqui por causa de sua experiência e envolvimento direto, pessoal.