I'm wondering, what is the correct punctuation in this sentence:

In OOP, each object contains data and a set of methods, which operate on the data.

I read the rules about restrictive and non-restrictive clauses, but I'm not sure which one is the case here. In my opinion it's supplementary information. Another question is whether comma is needed after "In OOP".

  • This is a definition, so I suppose that technically it could be considered either restrictive or non-restrictive. But you certainly don't want to use a comma here. You would want to use a comma with "... a set of methods, which usually operate on the data." So I guess that means that definitions should be considered restrictive (unless somebody comes up with a counterexample). Jan 29, 2013 at 21:20
  • Thank you. But in case of non-restrictive (supplementary) clause, I should put comma there. Why do you suggest to omit it?
    – damluar
    Jan 29, 2013 at 21:24
  • Because it sounds better without to me. Why do you say this is supplementary information? If you had a set of methods that didn't operate on the data, it wouldn't count as an object in OOP. I think this means you can make a good case for it being a restrictive clause (and certainly that is the way it should be treated grammatically). Jan 29, 2013 at 21:26
  • Classes by definition should contain methods that operate on the data, otherwise it's not a good place for them in this class. But I agree, it can be considered also as restrictive clause. Thank you again.
    – damluar
    Jan 29, 2013 at 21:37

3 Answers 3


In OOP, each object contains data, and a set of methods that operate on the data.

You could argue either way about whether it's a restrictive clause (we only care about methods that act on the data in this object) or a non-restrictive clause (it's a fact that all the methods operate on the data)*.

When we can argue something like this either way, there is one ultimate authority: The writer. That's you, or for the duration of this answer, that's me. I'm saying it's restrictive, changing to that (not necessary, but it underlines that I'm conveying it as restrictive information), and this lets me help keep "set of methods" with that clause rather than "data and a set of methods".

As does the comma after data. We don't need it there to be valid, but we're allowed it, and it helps the reader know that "operate on the data" only applies to the methods.

The comma after OOP is also optional. Whether we have a pause there or not would depend as much on how it flows with the prior sentences, as anything else.

If the clause about methods where something that could only be understood as non-restrictive, I'd consider rewriting into two sentences.

*I can think of some arguments against that, but that'd be for SO rather than EL&U.

  • 1
    I'm not sure you really can argue about whether it's a restrictive clause. What does it mean to postulate some other methods that don't act on the object's data, and which aren't contained within the object either? A restrictive clause would supposedly identify which set of methods we're talking about, but we already know that - they're the ones contained in the object! Jan 30, 2013 at 4:06
  • @FumbleFingers in some languages we might have methods that acted upon the object but did not act directly on the data as global methods (though whether they should exist at all, or whether they should be considered functions but not methods is another matter). It's also significant that with good encapsulation a method in another class can act upon an object but not directly upon the data. My main objection to either is that policy classes like comparers give us sound reasons to have methods that don't act upon internal data at all.
    – Jon Hanna
    Jan 30, 2013 at 9:56
  • @FumbleFingers Personally I'd have something more like "In OOP, each object contains data, and a set of methods. The data is information about the object's state and access to it is normally restricted so that only that object's methods can act directly upon it." But that's too much a rewrite to really answer the question.
    – Jon Hanna
    Jan 30, 2013 at 9:57
  • Personally, I'd just discard the comma and change the data to that data. You probably know more than me about what exactly constitutes a restrictive clause, but it seems to me you could turn it round to "A set of methods which operate on the data are contained within the object" without affecting that categorisation. The highlighted words sure look more like supplementary info about the set of methods, rather than being there to tell us which particular set of methods are being referred to. Jan 30, 2013 at 16:46

I would go for

In OOP, each object contains data and a set of methods which operate on the data.

or even

In OOP, each object contains data, and a set of methods which operate on the data.

  • Separating a non-restrictive clause with commas is normal.
    – Jon Hanna
    Jan 29, 2013 at 23:22
  • @JonHanna so it is. I have removed my quick judgement. I still feel that a comma after methods, even if treated as a non-restrictive clause, is clumsy and unnecessary but, as you point out, not wrong as such.
    – terdon
    Jan 30, 2013 at 14:04
  • I'd be inclined to bend from what is normal for the reason you say though. These comma rules are our servants, not our masters.
    – Jon Hanna
    Jan 30, 2013 at 15:22

"...set of methods, both of which operate on the data."

  • 5
    But the data doesn't operate on the data. Jan 29, 2013 at 21:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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