Object-oriented programming (OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods
together with their interactions – to design applications and computer
programs. Programming techniques may include features such as data abstraction, encapsulation, messaging, modularity, polymorphism, and inheritance.OOP was developed to increase the reusability and maintainability of source code.Transparent representation of the control flow had no priority and was meant to be handled by a compiler. With the increasing relevance of parallel hardware and multithreaded coding, developer transparent control flow becomes more important, something hard to achieve with OOP. Many modern programming languages now support OOP, at least as an option.
The OOP programming style in most object-oriented languages:
- Dynamic dispatch – when a method is invoked on an object, the object itself determines what code gets executed by looking up the method at run time in a table associated with the object. This feature distinguishes an object from an abstract data type (or module), which has a fixed (static) implementation of the operations for all instances. It is a programming methodology that gives modular component development while at the same time being very efficient.
- Encapsulation (or multi-methods, in which case the state is kept separate)
- Subtype polymorphism
- Object inheritance (or delegation)
- Open recursion – a special variable (syntactically it may be a keyword), usually called
this
orself
, that allows a method body to invoke another method body of the same object. This variable is late-bound; it allows a method defined in one class to invoke another method that is defined later, in some subclass thereof.
Additional concepts used in object-oriented programming include:
- Classes of objects
- Instances of classes
- Methods which act on the attached objects.
- Message passing
- Abstraction
Decoupling
Decoupling refers to careful controls that separate code modules from
particular use cases, which increases code re-usability. A common use
of decoupling in OOP is to polymorphically decouple the encapsulation
(see Bridge pattern and Adapter pattern) - for example, using a method interface which an encapsulated object must satisfy, as opposed to using the object's class.
Object-orientation and databases
Both object-oriented programming and relational database management systems (RDBMSs) are extremely common in software today. Since relational databases
don't store objects directly (though some RDBMSs have object-oriented
features to approximate this), there is a general need to bridge the two
worlds. The problem of bridging object-oriented programming accesses
and data patterns with relational databases is known as Object-Relational impedance mismatch. There are a number of approaches to cope with this problem, but no general solution without downsides.One of the most common approaches is object-relational mapping, as found in libraries like Java Data Objects and Ruby on Rails' ActiveRecord.
There are also object databases that can be used to replace RDBMSs, but these have not been as technically and commercially successful as RDBMSs.
Notational representation between objects
The relationships between classes are building
blocks of object oriented programming and very basic stuff. They are:
1. Association
Association is a relationship between two objects. In other words,
association defines the multiplicity between objects. You may be aware
of one-to-one, one-to-many, many-to-one, many-to-many all these words
define an association between objects. Aggregation is a special form of
association. Composition is a special form of aggregation.
Example: A Student and a Faculty are having an association.
2. Aggregation
Aggregation is a special case of association. A directional
association between objects. When an object ‘has-a’ another object, then
you have got an aggregation between them. Direction between them
specified which object contains the other object. Aggregation is also
called a “Has-a” relationship.
3. Composition
Composition is a special case of aggregation. In a more specific
manner, a restricted aggregation is called composition. When an object
contains the other object, if the contained object cannot exist without
the existence of container object, then it is called composition.
Example: A class contains students. A student cannot exist without a class. There exists composition between class and students.
Difference between aggregation and composition
Composition is more restrictive. When there is a composition between
two objects, the composed object cannot exist without the other object.
This restriction is not there in aggregation. Though one object can
contain the other object, there is no condition that the composed object
must exist. The existence of the composed object is entirely optional.
In both aggregation and composition, direction is must. The direction
specifies, which object contains the other object.
Example: A Library contains students and
books. Relationship between library and student is aggregation.
Relationship between library and book is composition. A student can
exist without a library and therefore it is aggregation. A book cannot
exist without a library and therefore its a composition. For easy
understanding I am picking this example. Don’t go deeper into example
and justify relationships!
4. Abstraction
Abstraction is specifying the framework and hiding the implementation
level information. Concreteness will be built on top of the
abstraction. It gives you a blueprint to follow to while implementing
the details. Abstraction reduces the complexity by hiding low level
details.
Example: A wire frame model of a car.
5. Generalization
Generalization uses a “is-a” relationship from a specialization to
the generalization class. Common structure and behavior are used from
the specialization to the generalized class. At a very broader level you
can understand this as inheritance. Why I take the term inheritance is,
you can relate this term very well. Generalization is also called a
“Is-a” relationship.
Example: Consider there exists a class
named Person. A student is a person. A faculty is a person. Therefore
here the relationship between student and person, similarly faculty and
person is generalization.
6. Realization
Realization is a relationship between the blueprint class and the
object containing its respective implementation level details. This
object is said to realize the blueprint class. In other words, you can
understand this as the relationship between the interface and the
implementing class.
Example: A particular model of a mobile ‘Samsung Galaxy’ that implements the blueprint of a mobile realizes the abstraction.
7. Dependency
Change in structure or behavior of a class affects the other related
class, then there is a dependency between those two classes. It need
not be the same vice-versa. When one class contains the other class it
this happens.
Example: Relationship between shape and circle is dependency.
No comments:
Post a Comment