A human has hair but is not hair.

Braided hair has hair as a quality but is also just hair.

A man is a male but a man also has the quality of having masculine quality and body parts.

How might I distinguish and reason about the two? I'm confused; specifically, in C++ programming, objects can own sub-objects and also have them built into their code structure and fall back on the base sub-object. There's a difference between sets and ownership, so I was wondering what language people use to distinguish the two. There's sometimes an argument over whether having objects own objects rather than inherit qualities and properties are better, and I wanted to reason about this using formal logic to try and explore this issue from a different angle.

  • There is the larger concept, I think of self-exemplification - does whiteness exemplify white? And there is mereology as a study of the whole-part relation. – Mozibur Ullah Sep 9 '15 at 2:47
  • @MoziburUllah Say we have the list of qualities of things that make us human. Are we still human if, say, we do not possess an eye? That says yes. Possessing an eye is a part of what makes an entity a human, but it also consists of a lot of different things. – CinchBlue Sep 9 '15 at 3:22
  • But if I possess an eye and am missing an ear, does that make me less human? Possibly. But I am still considered human. Therefore, there is no one definition that makes us human according to human opinion. – CinchBlue Sep 9 '15 at 3:23
  • 3
    While I do actually find this question interesting in a certain way, it strikes me that it is more about how the words "class" and "object" and "possess" happen to be used in a vocabulary developed for a programming language than about philosophy per se. What says the community? – virmaior Sep 9 '15 at 10:13
  • 2
    I think you're making too much of a linguistic artifact. Is and Has are used in inconsistent ways and making too much of the usage will lead you down dead ends. Perhaps do some "linguistic pre-processing" to see if there's really a distinction there and that may clarify your question. – R. Barzell Sep 9 '15 at 13:47

Is (verb : to be) is a simple word with many menaings...

From a "mathematical" point of view, we can identify three different "contexts" :

  • "Plato is a philosopher"; this context is relative to an object (or individual) belonging to a set or class. In modern math (set theory), this is expressed as : Plato ∈ philosphers.

  • "a man is a male"; this context is relative to a "concept" being part of a "more general" one. In modern math it is expressed with set inclusion : men ⊆ males.

  • "2+2 is 4"; this context is relative to identity, i.e. the relation between two names denoting the same "thing". In modern math it is expressed as : 2+2 = 4.

| improve this answer | |

At least for some instances where "is a" vs. "has a" is a question, I'd look at it in terms of essential vs. accidental properties -- is part of the essence of a given class that of the potential superclass?

In this view, you'd use a "has a" relationship when the property is (more) accidental. If you do this, then, in principle at least, you could change the identity, and even type (with subclassing rules), of the member that the class "has" on an instance by instance basis -- the feature is mutable in some senses.

In most languages it is impossible to change the inheritance relationships for specific instances (and where it is possible it is considered a bad idea) -- the "is a" relationship is baked in when the system is designed and built.

Really though, OO design is about constructing a restricted language relevant to a specific domain; when the domain gets complicated enough any of the issues in the philosophy of language could become relevant.

| improve this answer | |
  • But the question is not how to code; it's how to represent such a relationship of "is" vs. "has" in formal logic. – CinchBlue Sep 9 '15 at 23:35
  • I'm unaware of any formal philosophical approaches to this problem. – Dave Sep 10 '15 at 11:47
  • @VermillionAzure I'm with Dave, because the OP is coming from a programming perspective. One of the key things worth identifying from this perspective is that not everything fits cleanly into the structures used in programming. In fact, I have found that those two relationships are often vastly insufficient for describing even some programming task, much less philosophical ones. For example, I find many patterns do not provide clear guidelines on this, leading to strange superposition of "is a" vs "has," especially when smart pointers get involved. – Cort Ammon Sep 10 '15 at 15:57
  • Come to think about it, is there a "formal philosophical approach" to "is," much less trying to include "has" in the mix? – Cort Ammon Sep 10 '15 at 15:57

A red-haired man is male, is a mammal, has two legs (usually), has red hair.

Think what you can do with red hair: You can cut it, you can colour it, you can pull it out. Can you do any of these things with a red-haired man? You can "cut" him, but that means something different (likely a brutal knife-attack) than cutting hair. You can "colour" him, but that is a weird thing to do. Unless he is a member of the Blue Man Group. And you definitely can't pull him out.

In philosophy, if you confuse "has" and "is", people will just be confused and tell you that you are doing something wrong. In software development, you will end up confusing yourself.

| improve this answer | |

From a UML point of view, there are actually three things going on here, not just two. And object is of a class (instantiation/inheritance), via classes objects claim a given set of relationships (aggregation/relations), and some of those relationships are held so closely they are considered intrinsic to the objects of that class (composition/members). (These are true literally in a statically-typed world-view, but are conceptually maintained in any object framework, and almost true.)

Especially in computer science, but also in real life, all being involves containing, and all containing involves having. You not only are yourself, but you also have yourself as (maximal, in some way) part and lay claim to yourself via some kind of identity relation.

So, pulling back a bit, when it all comes down to it, there is only aggregation. Composition is just a matter of perspective. And inheritance is just a specific form of composition that conveys an intention to act in a given way.

In practice, the distinction generally comes down to how much detail one needs to provide to the object to get something done. If I want to do something that is part of my agenda as a being, I only need to identify myself, and the intention. "I build chairs." In general, I can be a number of different things, a human animal, a chair builder (because nowadays machines can do that, and in a special sense so do companies), a mind (remains may be human but only 'have had' a mind)...

But if that action is specific to a part of me, that part must be an element of my composition. "My left hand grasps the hammer." When the distinction between elements is clear, this is simple. And it is even fairly clear when they significantly overlap -- my left side and my front overlap, but they tend to play different roles in actions.

To the extent that my ability to build chairs is 'a hat' I wear, it could be an aspect of my instance, inherited by the definition of 'me', or I could focus primarily on 'me' as a human and a mind, making by ability to make chairs part of my composition.

This way of thinking makes for the most contention in object design, a 'state' or 'mode' or 'facet' or 'aspect' or 'perspective' [which all have specific meanings in the object-design context, or I would not list so many options] on an object is intermediate between its identity and its composition. Maybe I can't build chairs while surfing, then are the chair-building and surfing aspects of me disjoint? Do I want to have to say what aspect of myself is involved, in order to use those parts, if by doing so I make the complexity clearer? (And do I want to prevent myself from hammering while surfing, which will usually get me wet, perhaps with my own blood.)

Finally if that element is only temporary, so I need some point of reference to find it, and it may in fact not be there, so I might have to acquire or construct it, then it is simply aggregated to me by some relationship. "I have this chair, and I can give to you. But then if I need another chair, I will have to acquire one." Only a 'pointer' or other indicator of relationship to the object is then legitimately part of my composition.

The comment regarding Simula has a point. -- In computing we tried a world where these things are all ironed out cleanly, and have had to either back away from it (into the Smalltalk/Python/JavaScript/etc. alternative framings of class identity), or build huge systems (like polymorphic multiple inheritance in C++) to stretch around the boundary cases.

There are worlds, like that of pure LISP, where there are really only atomic values, names and pointers; so composition and class membership are total illusions. Even in class-tolerant (but not class-centric) object-oriented languages like Python and Javascript, these concepts are emulated and not always applicable.

It sometimes helps to maintain one's perspective to remember how much these latter two things are constructs, not natural occurrences, with variant models in different languages, both formal and natural, much less different problem domains, proving the basic ideas are not necessarily the same for everyone.

| improve this answer | |

I agree with Dave's answer, "is" and "has" run parallel to the distinction between essential and accidental properties. This was formalized in modal logic by Kripke:"Let's call something a rigid designator if in every possible world it designates the same object, a non-rigid or accidental designator if that is not the case... When we think of a property as essential to an object we usually mean that it is true of that object in any case where it would have existed". Of course, one has to adjust what counts as essential to one's purposes. Only essential properties are required for an object to stay what it is, the rest can be altered. Human "is" what is in the essence of being human, but only "has" what is accidental. It is essential for water to be H20, but it is accidental for it to have industrial uses. Nixon is essentially a son of his parents, but only accidentally a president.

In fact, OP comments:"Say we have the list of qualities of things that make us human. Are we still human if, say, we do not possess an eye? That says yes... Possessing an eye and an ear does not make me less human. Alas, when we program things in, we create constructs that probably assume certain things" mirror Kripke's criticism of the theory of descriptions as meanings. Russell originally proposed that meaning can be identified with a description, "a list of things", and one then picks out references according to it. One of Kripke's objections was:"Suppose a writer in a classics journal claimed to have evidence that the hemlock plant... was extinct in Attica by the fifth century, and that the philosopher reputed to have drunk hemlock actually drank some other vegetable poison. Would it not be natural to conclude that Socrates did not, after all, drink hemlock? But if Socrates is by definition the philosopher who drank hemlock, this conclusion cannot be true regardless of the evidence."

| improve this answer | |

While I see the question is programming territory and I defer to all answers above, here is an alternate perspective, for what it's worth.

Being is axiomatic to whatever world or "system" is given.

Specific beings can be "subtracted" and "remembered," shifting their ontological status to former beings. But no system, no matter how simple or complex, can introduce anything that does not "have" being. Kant, in some ways the father of systems, summarizes this by claiming: existence is not a predicate.

I know nothing about programming, but this may be a problem if being or is-ness is confused with the distinction equals, (=). Quite obviously 1 + 1 is not identical to 2. Anyone can see the difference. Both exist, each one is and both are. Both are admitted into the system. Yet their equality (=) also differentiates them. To "the system," so to speak, that differentiation is all that matters.

All predicates or sets of properties that things "have" differentiate, exclude, enclose identities. All properties "make a difference," to use Bateson's apt phrase. They are differences that "make a difference." One may say that things "have" being or existence. But within any universe or "system" this "makes no difference."

So, when we shift between ontologies or "what can exist" we shift between incommensurable systems. We start anew. Sorry, this may appear as total nonsense from your perspective. But I thought it might add to the imaginative component.

| improve this answer | |

I like that you relate this to programming.

In OOP we talk about the distinction between "is-a" and "has-a" relationships - which I believe you're getting at in your question. There's also the issue of inheritance (in programming), which helps to answer your question about where "braided hair" fits into the taxonomy of what hair is.

"A human has hair but is not hair." - This is a "has-a" relationship. Humans have hair. In the language of programming, we also say that "hair" is a subclass of "humans" - though not a strict subclass, in this case.

"Braided hair has hair as a quality but is also just hair" This is a "is-a" relationship. Braided hair has all of the fields and methods that normal hair does, for instance: color, length, hair.cut(). In CS we say that the class Braided Hair extends Hair as it has all the fields and methods that normal hair has, plus some extra specific qualities.

Anyway, TL;DR it looks like you're looking for is-a/has-a distinction, it's about as simple as that. Superclasses and extensions are also good concepts here, as is inheritance etc.

| improve this answer | |
  • 2
    Welcome to Philosophy.SE. While this is correct, it is not really valuable on this site, because it doesn't have anything to do with philosophy. – user2953 Jan 16 '16 at 19:58
  • OP asked about programming: "I'm confused; specifically, in C++ programming, objects can own sub-objects and also have them built into their code structure and fall back on the base sub-object. There's a difference between sets and ownership, so I was wondering what language people use to distinguish the two" I gave the is-a/has-a response as well as inheritance and superclasses - which is exactly the language people use to distinguish the two. – Derek Janni Jan 16 '16 at 20:37
  • I suggest that the original question should be examined here - after all, OP is asking about programming (granted, philosophy of programming) in philosophy section. – Derek Janni Jan 16 '16 at 20:38
  • Judging from the website OP posted his question on, he is asking for a philosophical vocabulary. If he would have wanted to know about programming, he would have asked on Stack Overflow. – user2953 Jan 16 '16 at 20:39
  • Maybe you don't know this, and I don't blame you for not knowing this if this is the case, but words like "inheritance", "is-a/has-a", "extends" and "superclass" are part of the philosophical vocab of OOP (if you consider OOP a theory or paradigm about how to deal with abstraction of objects - which I do). Again, OP seemed to ask how for vocab related to a programming concept. – Derek Janni Jan 16 '16 at 20:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.