So after a while of working in programming field I still haven't figured it out how exactly should programs be structured, in a large set I mean. Which I think it's also because of working in an enterprise development. Say that I want to write a program, a messenger for a LAN network. How do I really know what classes to make for this program? How to divide the program into smaller pieces and classes in the best and most efficient way? This is just an example. I don't mean specifically for this problem set, it's the general approach that I am wondering about.EDIT: I have asked this question here because it exactly says in the help center:What topics can I ask about here?Programmers Stack Exchange is a Q&A site for professionals and  students in software development and related fields who are interested  in getting expert answers on conceptual questions about software  development.If you have a question about...software requirements software architecture and designalgorithm and data structure conceptsMy question, according to my understanding, refers to the to the software architecture and design. It's not a specific coding question otherwise it would have been asked on Stackoverflow. It is a conceptual question which should be fit here. The comments and answers are referring to that there are a lot of books covering this topic. I'd accept even a book name for an answer if the book answers my question. If the answer does not fit into this form of Q&A, at least I could be pointed to the right direction. After all we're all here to learn something.
How to structure a program into classes
design;object oriented;object oriented design