OOP consepts

- ## The  **core concepts**  of OOP are indeed  **14** :-
	- [[Class]] - Blueprint for creating objects, defining properties and methods.
	  logseq.order-list-type:: number
	- [[Constructor]] - Special method for initializing objects when created.
	  logseq.order-list-type:: number
	- [[Destructors]] - Method for cleaning up when an object is destroyed or goes out of scope.
	  logseq.order-list-type:: number
	- [[Object]] - An instance of a class containing data and behavior.
	  logseq.order-list-type:: number
	- [[Encapsulation]] - Bundling data and methods, restricting direct access to an object's internal state.
	  logseq.order-list-type:: number
	- [[Abstraction]] - Hiding complex implementation details and exposing only essential features.
	  logseq.order-list-type:: number
	- [[Inheritance]] - Mechanism by which one class derives properties and behaviors from another.
	  logseq.order-list-type:: number
	- [[Polymorphism]] - Ability for objects of different types to be treated as instances of a common superclass.
	  logseq.order-list-type:: number
	- [[Composition]] - Creating complex objects by combining simpler objects, a "has-a" relationship.
	  id:: 67e63024-2a0a-4a19-aff1-05ad33f056cf
	  logseq.order-list-type:: number
	- [[Interface]] - Defines a contract that classes must follow, without providing implementation.
	  logseq.order-list-type:: number
	- [[Method Overloading]] - Defining multiple methods with the same name but different parameters.
	  logseq.order-list-type:: number
	- [[Method Overriding]] - Redefining a method in a subclass to change its behavior.
	  logseq.order-list-type:: number
	- [[Static Methods and Class Methods]] - Methods that belong to the class rather than instances.
	  logseq.order-list-type:: number
	- [[Dynamic Binding (Late Binding)]] - Resolving method calls at runtime based on the object type.
	  logseq.order-list-type:: number
-
- ## **additional related concepts** or **design patterns** that can supplement or extend OOP are:-
	- [[Delegation]] - One object handing over responsibilities to another.
	- [[Mixin]] - A class that provides functionality to other classes without being a parent class.
	- [[Abstract Classes]] - Classes that cannot be instantiated and may contain abstract methods.
	- [[Loose Coupling and High Cohesion]] - Reducing dependencies between components and ensuring focused class responsibilities
	- [[Factory Pattern]] - Creating objects without specifying the exact class of object to be created.
	- [[Observer Pattern]] - Notifying multiple objects about state changes in another object.
	- [[Singleton Pattern]] - Ensuring a class has only one instance and providing a global point of access.

-