Object-oriented analysis (OOA) applies object-modeling techniques to analyze the functional requirements for a system. Object-oriented design (OOD) elaborates the analysis models to produce implementation specifications. OOA focuses on what the system does, OOD on how the system does it.
Object-oriented analysis (OOA) is the process of analyzing a task (also known as a problem domain), to develop a conceptual model that can then be used to complete the task. A typical OOA model would describe computer software that could be used to satisfy a set of customer-defined requirements.
I think so.
Background: The company I worked for at the time picked up a constrained and business focused OOA variant called “Objects 9000” back in ~1994 from Martin Roesch (http://www.roesch.com, sadly German only). We adapted the business analysis part of that and had some really good results with good clarity on the business domain and the functional requirements and the analysis model also naturally yields what you here call ‘roots’ and their dependent objects.
I’ll admit that we, at that company, weren’t wise enough to take the shortest path to turning that into a design back then (client/server was still hot, and there were too many fantasies about stamping out software like cars in a factory and thus way too much fancy plumbing magic), but once web technologies came around and you needed to think about concurrency and scaling, triaging data into read-only, read/write etc, those basic principles of how to dissect the domain and capture the requirements have proven very useful – I keep doing it whenever I write apps that are not straight-up plumbing (like Service Bus).
I haven’t even read “the” DDD book and the concepts being discussed here are all immediately familiar, so there seems to be a very obvious link. So that background and the fact that me and a bunch of other folks have been talking about and have been practicing patterns such a read/write separation or chronological, insert-only data models for quite a while, first made me say “how is this new?” on DDD/ES/CQRS, but novelty isn’t the point here. I’m actually very happy that folks like Greg and everyone else here are taking all these good ideas and putting them together in a coherent way so that they get exposure to a broader audience. Bottom line: I think of CQRS/ES/DDD as a way to package best-practice and thus there’s overlap and “standing on shoulders of giants” going on, including taking the better parts of OOAD.
Many years ago, there was this new-fangled concept of representing real world objects and concepts through a programming language. There was a great paper written by a researcher named Trygsve Reenskaug that discussed how to approach this style of programming using a paradigm that he originally called Thing Model View Editor (we now know it as the MVC pattern but within those papers are also thoughts on how to represent business concepts within the code). Over the years as we moved into the world of rapid application development and client-server applications, our code begin to lose the elegance of modeling the real world domain in our code and began to look more like operations that manipulated transient representations of data. In other words the code was less Object-Oriented and more procedural in nature. Truth be told there were a lot of objects, but they were all infrastructure related.
Every few years, a skilled practitioner would remind us that we had this powerful mechanism to tie behavior and data together. (Our industry has the collective memory of a goldfish). Eric Evans just so happens to be the one sounding the trumpet for today’s developer.
Long story short…yes Domain Driven Design IS Object-Oriented Design.