From bf8e34f65a2a3703bb9cda2026a1ab44a04c5bcb Mon Sep 17 00:00:00 2001 From: syedmouaazfarrukh Date: Sun, 22 Jan 2023 03:36:42 -0800 Subject: [PATCH] Adding content to 102-object-oriented-programming --- .../102-model-driven-design/100-domain-models.md | 11 ++++++++++- .../102-model-driven-design/101-anemic-models.md | 11 ++++++++++- .../102-layered-architectures.md | 15 ++++++++++++++- .../103-domain-language.md | 11 ++++++++++- .../104-class-invariants.md | 11 ++++++++++- .../102-model-driven-design/index.md | 10 +++++++++- .../102-object-oriented-programming/index.md | 9 ++++++++- 7 files changed, 71 insertions(+), 7 deletions(-) diff --git a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/100-domain-models.md b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/100-domain-models.md index 030b60c3d..6c59a3000 100644 --- a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/100-domain-models.md +++ b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/100-domain-models.md @@ -1 +1,10 @@ -# Domain models \ No newline at end of file +# Domain Models + +A domain model is a representation of a specific area of knowledge or business that is used to model the objects and concepts within that domain, and to capture the relationships and constraints between them. In object-oriented programming (OOP), a domain model is typically represented by a set of classes and interfaces, with each class or interface representing a specific concept or object within the domain. + +A domain model is used to provide a clear and consistent representation of the problem domain, and to capture the business requirements and constraints of the system. It is also used to guide the design of the system and to ensure that the system accurately reflects the real-world problem it is intended to solve. + +Learn more from the following links: + +- [Overview of Domain model](https://en.wikipedia.org/wiki/Domain_model) +- [Software Engineering | Domain Modeling](https://www.geeksforgeeks.org/software-engineering-domain-modeling/) \ No newline at end of file diff --git a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/101-anemic-models.md b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/101-anemic-models.md index b0b06ca49..62d37e0d8 100644 --- a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/101-anemic-models.md +++ b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/101-anemic-models.md @@ -1 +1,10 @@ -# Anemic models \ No newline at end of file +# Anemic Models + +An Anemic model, also known as an anemic domain model, is a type of domain model in which the domain objects only contain data (attributes) and lack behavior. An anemic model often results in the use of data-transfer objects (DTOs) and service layer to handle the behavior. + +An anemic model is considered an anti-pattern in object-oriented programming (OOP) because it violates the principles of encapsulation and separation of concerns. In an anemic model, the behavior is separated from the data, and is typically implemented in a separate service layer, which can lead to a complex, tightly coupled, and hard-to-maintain codebase. + +Learn more from the following links: + +- [Overview of Anemic Domain Model](https://en.wikipedia.org/wiki/Anemic_domain_model) +- [What is an Anaemic Domain Model?](https://www.ensonodigital.com/blog/anaemic-domain-model-vs-rich-domain-model) \ No newline at end of file diff --git a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/102-layered-architectures.md b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/102-layered-architectures.md index 90527a84a..460156d71 100644 --- a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/102-layered-architectures.md +++ b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/102-layered-architectures.md @@ -1 +1,14 @@ -# Layered architectures \ No newline at end of file +# Layered Architectures + +A layered architecture is a software design pattern in which the functionality of a system is divided into a set of layers, with each layer having a specific responsibility and interacting with the layers above and below it. The main idea behind a layered architecture is to separate the concerns of the system into distinct and independent layers, making the code more modular, easier to understand, test, and modify. + +There are several types of layered architectures, but a common one is the three-layer architecture which consists of: + +- Presentation Layer +- Business Layer +- Data Access Layer + +Learn more from the following links: + +- [Software Architecture Patterns — Layered Architecture](https://priyalwalpita.medium.com/software-architecture-patterns-layered-architecture-a3b89b71a057) +- [5 Primary Layers in Software Architecture?](https://www.indeed.com/career-advice/career-development/what-are-the-layers-in-software-architecture) \ No newline at end of file diff --git a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/103-domain-language.md b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/103-domain-language.md index 9380b1801..39c3bc046 100644 --- a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/103-domain-language.md +++ b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/103-domain-language.md @@ -1 +1,10 @@ -# Domain language \ No newline at end of file +# Domain Language + +A domain language is a specific vocabulary and set of concepts used to describe and communicate about a specific area of knowledge or business. In software development, a domain language is used to model the objects and concepts within a specific domain, and to capture the relationships and constraints between them. + +A domain language is used to provide a common understanding of the problem domain among all stakeholders, including developers, business analysts, and domain experts. It is also used to ensure that the software system accurately reflects the real-world problem it is intended to solve. + +Learn more from the following links: + +- [Overview of Domain-specific language](https://en.wikipedia.org/wiki/Domain-specific_language) +- [What are Domain Languages (DSLs)?](https://www.jetbrains.com/mps/concepts/domain-specific-languages/) \ No newline at end of file diff --git a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/104-class-invariants.md b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/104-class-invariants.md index ec5319961..5c9768bc6 100644 --- a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/104-class-invariants.md +++ b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/104-class-invariants.md @@ -1 +1,10 @@ -# Class invariants \ No newline at end of file +# Class Invariants + +A class invariant is a set of conditions that must be true for any object of a class, at any point in time. In object-oriented programming (OOP), class invariants are used to define the valid states of an object and to ensure that the object always remains in a valid state. + +Class invariants are typically defined in the constructor of a class and are enforced through the use of private methods and data members that are used to validate the state of the object. They are also checked in the class's methods before and after any operation that can change the state of the object. + +Learn more from the following links: + +- [Overview of Class invariant](https://en.wikipedia.org/wiki/Class_invariant) +- [The concept of class invariant in object-oriented programming](https://arxiv.org/abs/2109.06557) \ No newline at end of file diff --git a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/index.md b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/index.md index 6fefd0e99..bb5fc5abe 100644 --- a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/index.md +++ b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/102-model-driven-design/index.md @@ -1 +1,9 @@ -# Model driven design \ No newline at end of file +# Model Driven Design + +Model-driven design (MDD) is a software development methodology in which the design of a system is represented by a set of models, and the models are used to drive the development of the system. MDD is based on the idea that the design of a system can be represented by a set of models, and that these models can be used to generate the code for the system. + +The main advantage of using MDD is that it allows for a clear separation of concerns between the design and implementation of a system. The models represent the design of the system, and the code is generated from the models, which makes it easier to maintain and evolve the system. Additionally, MDD can also improve the quality of the code, as the models can be used to check for design errors and inconsistencies before the code is generated. + +Learn more from the following links: + +- [Model Driven Design – theory to practice](https://www.todaysoftmag.com/article/1529/model-driven-design-theory-to-practice) \ No newline at end of file diff --git a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/index.md b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/index.md index 1a7ca3716..4b4694bac 100644 --- a/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/index.md +++ b/src/roadmaps/software-design-architecture/content/102-object-oriented-programming/index.md @@ -1 +1,8 @@ -# Object oriented programming \ No newline at end of file +# Object Oriented Programming + +Object-oriented programming (OOP) is a programming paradigm that is based on the concept of "objects," which are instances of a class. In OOP, a class is a blueprint for creating objects, which have both data (attributes) and behavior (methods). The main idea behind OOP is to model real-world objects and their interactions, making it well-suited for creating complex and large-scale software systems. + +Learn more from the following links: + +- [Discover Object Oriented Programming](https://blog.hubspot.com/website/object-oriented-programming) +- [Software Development Tutorial - What is object-oriented language?s](https://www.youtube.com/watch?app=desktop&v=SS-9y0H3Si8) \ No newline at end of file