El diseño orientado a objetos comenzó desde el momento en que se inventaron las computadoras. La programación estaba allí, y los enfoques de programación entraron en escena. La programación es básicamente dar ciertas instrucciones a la computadora.
Al comienzo de la era informática, la programación generalmente se limitaba a la programación en lenguaje de máquina. El lenguaje de máquina se refiere a esos conjuntos de instrucciones que son específicas de una máquina o procesador en particular, que están en forma de 0 y 1. Estas son secuencias de bits (0100110…). Pero es bastante difícil escribir un programa o desarrollar software en lenguaje máquina.
En realidad, es imposible desarrollar software utilizado en los escenarios actuales con secuencias de bits. Esta fue la razón principal por la que los programadores pasaron a la próxima generación de lenguajes de programación, desarrollando lenguajes ensambladores, que estaban lo suficientemente cerca del idioma inglés para entenderlos fácilmente. Estos lenguajes ensambladores se utilizaron en microprocesadores. Con la invención del microprocesador, los lenguajes ensambladores florecieron y dominaron la industria, pero no fue suficiente. De nuevo, a los programadores se les ocurrió algo nuevo, es decir, programación estructurada y procedimental.
Programación estructurada:
el principio básico del enfoque de programación estructurada es dividir un programa en funciones y módulos. El uso de módulos y funciones hace que el programa sea más comprensible y legible. Ayuda a escribir un código más limpio y a mantener el control sobre las funciones y módulos. Este enfoque da más importancia a las funciones que a los datos. Se enfoca en el desarrollo de grandes aplicaciones de software, por ejemplo, C se usó para el desarrollo de sistemas operativos modernos. Los lenguajes de programación: PASCAL (introducido por Niklaus Wirth) y C (introducido por Dennis Ritchie) siguen este enfoque.
Enfoque de programación procedimental –
Este enfoque también se conoce como el enfoque de arriba hacia abajo. En este enfoque, un programa se divide en funciones que realizan tareas específicas. Este enfoque se utiliza principalmente para aplicaciones de tamaño mediano. Los datos son globales y todas las funciones pueden acceder a datos globales. El inconveniente básico del enfoque de programación procedimental es que los datos no están protegidos porque los datos son globales y cualquier función puede acceder a ellos. El flujo de control del programa se logra a través de llamadas a funciones y sentencias goto. Los lenguajes de programación: FORTRAN (desarrollado por IBM) y COBOL (desarrollado por la Dra. Grace Murray Hopper) siguen este enfoque.
Estas construcciones de programación se desarrollaron a finales de los años setenta y ochenta. Todavía había algunos problemas con estos lenguajes, aunque cumplían con los criterios de programas bien estructurados, software, etc. No estaban tan estructurados como los requisitos en ese momento. Parecen estar demasiado generalizados y no se correlacionan con las aplicaciones en tiempo real.
Para resolver este tipo de problemas, se desarrolló como solución OOP, un enfoque orientado a objetos.
El enfoque de programación orientada a objetos (POO):
el concepto de programación orientada a objetos se diseñó básicamente para superar el inconveniente de las metodologías de programación anteriores, que no estaban tan cerca de las aplicaciones del mundo real. La demanda aumentó, pero aún así, se utilizaron métodos convencionales. Este nuevo enfoque supuso una revolución en el campo de la metodología de programación.
La programación orientada a objetos (OOP) no es más que aquello que permite escribir programas con la ayuda de ciertas clases y objetos en tiempo real. Podemos decir que este enfoque está muy cerca del mundo real y sus aplicaciones porque el estado y el comportamiento de estas clases y objetos son casi los mismos que los objetos del mundo real.
Profundicemos en los conceptos generales de OOP, que se detallan a continuación: ¿
Qué son Clase y Objeto?
Es el concepto básico de OOP; un concepto extendido de la estructura utilizada en C. Es un tipo de datos abstracto y definido por el usuario. Consta de varias variables y funciones. El propósito principal de la clase es almacenar datos e información. Los miembros de una clase definen el comportamiento de la clase. Una clase es el modelo del objeto, pero también podemos decir que la implementación de la clase es el objeto. La clase no es visible para el mundo, pero el objeto sí.
CPP
Class car { int car_id; char colour[4]; float engine_no; double distance; void distance_travelled(); float petrol_used(); char music_player(); void display(); }
Aquí, el coche de clase tiene propiedades car_id, color, engine_no y distancia. Se asemeja al automóvil del mundo real que tiene las mismas especificaciones, que puede declararse público (visible para todos fuera de la clase), protegido y privado (visible para nadie). Además, hay algunos métodos como distancia_viajada(), gasolina_usada(), reproductor_de_música() y pantalla(). En el código que se muestra a continuación, el automóvil es una clase y c1 es un objeto del automóvil.
CPP
#include <iostream> using namespace std; class car { public: int car_id; double distance; void distance_travelled(); void display(int a, int b) { cout << "car id is=\t" << a << "\ndistance travelled =\t" << b + 5; } }; int main() { car c1; // Declare c1 of type car c1.car_id = 321; c1.distance = 12; c1.display(321, 12); return 0; }
Abstracción de datos:
la abstracción se refiere al acto de representar características importantes y especiales sin incluir los detalles de fondo o la explicación sobre esa característica. La abstracción de datos simplifica el diseño de la base de datos.
- Nivel Físico:
Describe cómo se almacenan los registros, que muchas veces se ocultan al usuario. Se puede describir con la frase «bloque de almacenamiento».
- Nivel Lógico:
Describe los datos almacenados en la base de datos y las relaciones entre los datos. Los programadores generalmente trabajan en este nivel ya que conocen las funciones necesarias para mantener las relaciones entre los datos.
- Nivel de visualización:
los programas de aplicación ocultan los detalles de los tipos de datos y la información por motivos de seguridad. Este nivel generalmente se implementa con la ayuda de GUI, y se muestran los detalles destinados al usuario.
Encapsulación:
la encapsulación es uno de los conceptos fundamentales en la programación orientada a objetos (POO). Describe la idea de envolver datos y los métodos que funcionan con datos dentro de una unidad, por ejemplo, una clase en Java. Este concepto se usa a menudo para ocultar la representación del estado interno de un objeto desde el exterior.
Herencia:
la herencia es la capacidad de una clase para heredar capacidades o propiedades de otra clase, denominada clase principal. Cuando escribimos una clase, heredamos propiedades de otras clases. Entonces cuando creamos una clase, no necesitamos escribir todas las propiedades y funciones una y otra vez, ya que estas pueden ser heredadas de otra clase que la posea. La herencia permite al usuario reutilizar el código siempre que sea posible y reducir su redundancia.
Java
import java.io.*; class GFG { public static void main(String[] args) { System.out.println("GfG!"); Dog dog = new Dog(); dog.name = "Bull dog"; dog.color = "Brown"; dog.bark(); dog.run(); Cat cat = new Cat(); cat.name = "Rag doll"; cat.pattern = "White and slight brownish"; cat.meow(); cat.run(); Animal animal = new Animal(); animal.name = "My favourite pets"; animal.run(); } } class Animal { String name; public void run() { System.out.println("Animal is running!"); } } class Dog extends Animal { /// the class dog is the child and animal is the parent String color; public void bark() { System.out.println(name + " Wooh ! Wooh !" + "I am of colour " + color); } } class Cat extends Animal { String pattern; public void meow() { System.out.println(name + " Meow ! Meow !" + "I am of colour " + pattern); } }
Polimorfismo:
el polimorfismo es la capacidad de los datos para procesarse en más de una forma. Permite la realización de una misma tarea de varias formas. Consiste en la sobrecarga y la anulación de métodos, es decir, escribir el método una vez y realizar varias tareas con el mismo nombre de método.
CPP
#include <iostream> using namespace std; void output(float); void output(int); void output(int, float); int main() { cout << "\nGfG!\n"; int a = 23; float b = 2.3; output(a); output(b); output(a, b); return 0; } void output(int var) { // same function name but different task cout << "Integer number:\t" << var << endl; } void output(float var) { // same function name but different task cout << "Float number:\t" << var << endl; } void output(int var1, float var2) { // same function name but different task cout << "Integer number:\t" << var1; cout << " and float number:" << var2; }
Algunos puntos importantes que debe saber sobre la programación orientada a objetos:
- OOP trata los datos como un elemento crítico.
- El énfasis está en los datos más que en el procedimiento.
- Descomposición del problema en módulos más simples.
- No permite que los datos fluyan libremente en todo el sistema, es decir, flujo de control localizado.
- Los datos están protegidos de funciones externas.
Ventajas de los OOP –
- Modela muy bien el mundo real.
- Con OOP, los programas son fáciles de entender y mantener.
- OOP ofrece reutilización de código. Las clases ya creadas se pueden reutilizar sin tener que volver a escribirlas.
- OOP facilita el desarrollo rápido de programas donde es posible el desarrollo paralelo de clases.
- Con OOP, los programas son más fáciles de probar, administrar y depurar.
Desventajas de la programación orientada a objetos:
- Con OOP, las clases a veces tienden a generalizarse demasiado.
- Las relaciones entre clases se vuelven superficiales a veces.
- El diseño de programación orientada a objetos es complicado y requiere un conocimiento adecuado. Además, es necesario realizar una planificación y un diseño adecuados para la programación orientada a objetos.
- Para programar con OOP, el programador necesita habilidades adecuadas como diseño, programación y pensamiento en términos de objetos y clases, etc.
Publicación traducida automáticamente
Artículo escrito por Bhumika_Rani y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA