Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3272612
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 17, 20262026-05-17T18:50:39+00:00 2026-05-17T18:50:39+00:00

There is this famous quote that says Procedural code gets information then makes decisions.

  • 0

There is this famous quote that says

Procedural code gets information then
makes decisions. Object-oriented code
tells objects to do things. — Alec
Sharp

The subject of the post is precisely about that.

Let’s assume we are developing a game in which we have a Game where there is a Board.
When facing the problem of deciding which methods are we going to implement on the Board class, I always think of two different ways:

The first approach is to

populate the Board class with getSize(), getPieceAt(x, y), setPieceAt(x, y, piece). This will seem reasonable and is what is generally found in libraries/frameworks. The Board class has a set of internal features that wants to share and has a set of methods that will allow the client of the class to control the class as he wishes. The client is supposed to ask for the things he needs and to decide what to do. If he wants to set all board pieces to black, he will “manually” iterate over them to accomplish that goal.

The second approach is about

looking for Board‘s dependent classes, and see what they are “telling” it to do. ClassA wants to count how many pieces are red, so I’d implement a calculateNumberOfRedPieces(). ClassB intends to clear all the pieces on the Board(set all of them to NullPiece, for example), so I’d add a clearBoard() method to the Board class. This approach is less general, but allows for a lot more flexibility on other aspects. If I “hide” Board behind an IBoard interface, and decide that I’d want to have a board with infinite size, doing in the first way, I’d be stuck, as I’d have to iterate over an infinite number of items! On the other hand, in this way, I could do fine (I could, for instance, assume all pieces are null other than the ones contained in a hashtable!).

So…

I am aware that if I intend to make a library, I am probably stuck with the first approach, as it is way more general. On the other hand, I’d like to know which approach to follow when I am in total control of the system that’ll make use of the Board class — when I am the one who is going to also design all the classes that’ll make use of the Board. Currently, and in the future (won’t the second approach raise problems if later I decide to add new classes that are dependent on the Board with different “desires”?).

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-17T18:50:39+00:00Added an answer on May 17, 2026 at 6:50 pm

    The quote is really warning you away from data structures that don’t do anything with the data they hold. So your Board class in the first approach might be able to be done away with and replaced by a generic collection.

    Regardless, the Single Responsibility Principle still applies, so you need to treat the second approach with caution.

    What I would do is invoke YAGNI (you aren’t gonna need it) and try to see how far I could go using a generic collection rather than a Board class. If you find that later you do need the Board class its responsibility will likely be much more clear by then.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

There doesn't seem to be any tried and true set of best practices to
I have found this example on StackOverflow: var people = new List<Person> { new
I notice in several API's, that you may create a struct which is used
I have a script that appends some rows to a table. One of the
I have a login.jsp page which contains a login form. Once logged in the
We manage a site for a medical charity. They have a number of links
Let say I have the following desire, to simplify the IConvertible's to allow me
I am writing a query to fetch results for all the values in a
I know its probably possible, but is it practical and doable to try and
I know its probably possible, but is it practical and doable to try and

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.