3 ms·
> The primary common ground is that their functions have encapsulation You omitted Smalltalk. Most people would agree that SmallTalk is object-oriented. But t
by Ygg2 7mo ago
> The primary common ground is that their functions have encapsulation
You omitted Smalltalk. Most people would agree that SmallTalk is object-oriented.
But that kinda ruins the common ground thesis.
> Language evolves, certainly. It is fine for "object-oriented" to mean something else today.
pjmlp definition is very fuzzy. It judges object-orientedness based on a few criteria, like inheritance, encapsulation, polymorphism, etc. More checks, stronger OOP.
By that, even Haskell is somewhat OOP, and so is C, assembly, Rust, and any language.
---
What I prefer is looking at it as it's used. And how it's used for appears to be akin to using it as an everyday term fish or fruit.
No one would agree that a cucumber is a fruit. Or that humans are fish. Even though botanically and genetically they are.
- 9rx 7mo ago> You omitted Smalltalk. Exactly. It isn't functional. It doesn't use functions. It uses message passing instead. That is exactly why the term "object-oriented" was originally coined for Smalltalk. It didn't fit within the use of "imperative" and "functional" that preceded it. > But that kinda ruins the common ground thesis. That is the thesis: That Smalltalk is neither imperative nor functional. That is why it was given its own category. Maybe you've already forgotten, but I will remind that it was Smalltalk's creator that invented the term "object-oriented" for Smalltalk. Smalltalk being considered something different is the only reason for why "object-oriented" exists in the lexicon. Erlang is the language that challenges the common ground thesis: It has both functions with encapsulation and message passing with encapsulation. However, I think that is easily resolved by accepting that it is both functional and object-oriented. That is what Joe Armstrong himself settled on and I think we can too. > What I prefer is looking at it as it's used. And when you look you'll soon find out that there is no commonality here. Everyone has their own vastly different definition. Just look at how many different definitions we got in this thread alone. > No one would agree that a cucumber is a fruit. Actually, absent of context defining whether you are referring to culinary or botanical, many actually do think of a cucumber as a fruit. The whole "did you know a tomato is actually a fruit?" is something that made the big leagues in the popular culture. However, your general point is sound: The definitions used are consistent across most people. That is not the case for object-oriented, though. Again, everyone, their brother, and pjmlp have their own thoughts and ideas about what it means. Looking at use isn't going to settle on a useful definition. Realistically, if you want to effectively use "object-oriented" in your communication, you are going to have to explicitly define it each time.
- Ygg2 7mo ago> That is exactly why the term "object-oriented" was originally coined for Smalltalk. Sure but your definition doesn't cover it. If language for which the term was coined, it's a bit meaningless, ain't it. Problem with making encapsulation and polymorphism essential to OOP definition, is that it then starts garbling up functional languages like Haskell and imperative like C. I can see them being necessary but not enough to classify something as OOP. > And when you look you'll soon find out that there is no commonality here. Perhaps, but broadly speaking people agree that C++ and Java are OOP, but for example C isn't. Same way when people say and give me a fruit (as in fruits and vegetables), you'd be looked oddly if you gave a cucumber, rather than an apple. Same way can be thought of OOP. The common definition is basically covers Message-passing-languages, and inheritance/prototype based languages.
- igouy 7mo agoFruit = { Apple, Cucumber, … } Veg = { Cucumber, … } Fruit As In = Fruit − Veg
- Ygg2 7mo agoCulinary they are separate. But fruit can refer to anything that develops from a pollinated flower. Including cucumber and strawberry.
- 9rx 7mo ago> Sure but your definition doesn't cover it. How does it not cover it? > Problem with making encapsulation and polymorphism essential to OOP definition, is that it then starts garbling up functional languages like Haskell and imperative like C. Polymorphism? That was never mentioned. Let me reiterate the definitions: - Imperative: Plain functions (C, Fortran, Pascal). - Functional: Functions with encapsulation (C++, Java, Haskell, Erlang). - Object-oriented: Message passing (Smalltalk, Objective-C, Ruby, Erlang). Let me also reiterate that there are other axis of concerns. Imperative, functional, and object-oriented are not trying to categorize every last feature a programming language might have. Mutable/immutable, or polymorphic/monomorphic, etc. are others concern and can be independently labeled as such. > Perhaps, but broadly speaking people agree that C++ and Java are OOP Many do, but just as many hold on to the original definition. Try as you might, you're not going to find a common definition here, I'm afraid. If you want to use the term effectively, you're going to have to explicitly define it each time.