I think you're falling into what I will start to call the "Starting with the Nuts and Bolts" trap. Or maybe it should be called the "Solution looking for a Problem" trap. Object orientation is not so much about modeling objects in the real world as it is about assigning the responsibility of doing something to the correct abstraction. A program "object" is an abstraction and its methods carry out the object's responsibilities. Any information encapsulated in the object should be there to support its ability to carry out its responsibilities.
Let's take this for example:
A website where teachers can post lessons and students can follow them
Just because this statement mentions teachers and students, it doesn't necessarily mean that you will have these abstracted as objects in your program. Sure, a (real-world) teacher will use the program but what will the Teacher object do? If you start programming by writing a Teacher class without really knowing what its purpose is, then all you've succeeded in doing was to create a "solution" to an undefined "problem".
A better way is to start with high level stories of what your program will do to satisfy its users' needs.
Start with this story/scenario: "As a Teacher, I would like to post a lesson so that my students can start going through it."
Now you can identify your user, a teacher, and what they want to do: post a lesson. How does a teacher post a lesson? What form would that lesson be in that they can enter it into a computer? How is this lesson going to be stored in the computer?
Then you can have another story/scenario: "As a student, I want to view a lesson that my teacher posted so that I can go through it and learn the material."
How does the student select a lesson? How is the lesson presented to the student? How do they show that they have gone through a lesson? How are they rated/tested on their understanding of the material in the lesson? Should these last two even be considered as part of this scenario or should we have another scenario to cover them. Like, "As a student, I'd like to be tested on my understanding of the material in a lesson so that I can be graded by my teacher" or something like that.
Another analogy to this is that of producing a movie or a play. You don't just start with a bunch of random characters and start giving them costumes and lines to deliver. You first think of a plot. The plot will give you a general story line. Then, you develop detailed story lines that support the main story line. When you have these story lines, you'll have a better idea of who the characters are who will play roles in them. Once you have that, then you can develop the characters and give them personalities, traits, actions, interactions, and dialog. Objects are like that: they are the characters in the story that is your program.
Does that make sense?