Question: I recently had a homework question where we were supposed to work with a chess board, and place a number of queens on the board. 

The question was trivial in terms of difficulty, but what I wanted to ask was this:

Should I just make a boolean 2-D array and change every position that contains a queen to 1 or should I make a private class to represent a queen, that has x and y coordinates as instance variables? 

This might not seem very important or pressing, but I'm using Java and it kinda gets to the core of the concept of OO programming. If we never use the modular capabilities of Java, then why use Java at all? We might as well have written the same thing in C or Python. 

Which would be more appropriate in general do you think? I would appreciate it if you could restrict your answers to ones that are backed by reason, as opposed to opinions or personal preferences.

Answer: 
I know you don't want an opinion but I'm going to give you one anyway: there is no general case. The art of software design lies in being able to make the appropriate choice in data and code structure depending on the specifics of the application. OO languages give you a more expressive palette to design with, but there are no hard and fast rules that apply in every situation. 

So, that's the opinion. Now, to your specific example. A question I might ask myself is: What's more useful? An individual piece knowing where it is on the board, or the board knowing where each piece is? If you don't have a separate notion of a board, i.e. in the form of a 2D array that contains pieces, then you're going to have to ask every piece where it is everytime you need to do something with a piece. This is perhaps fine if you only have a couple of pieces, but it gets inefficient the more pieces you have.

Conversely if, let's say, you have a very large chessboard - 500x500 - and only a couple of pieces on it, then a 2D array would be very inefficient, so a sparse data structure would likely be better.

Another way to look at it: if you have more the one piece then they're going to be held in a data structure of some kind, perhaps an array, or a 2D array, or a linked list, or an array of linked lists, or whatever. What data structure are you going to choose, and why?
You could adequately represent the **state** of the board using either of the methods you have described. The most *appropriate* method to use will depend on the desired **behavior** of the system, which we haven't been told.