oops concepts c object oriented programming concept tutorial
Este tutorial explica los conceptos de OOPS en C #. Puede aprender sobre los principios de programación orientada a objetos como polimorfismo, encapsulación, herencia y abstracción:
La programación orientada a objetos es un modelo de programación que funciona según un principio que gira en torno a los objetos en lugar de la acción o la lógica. Permite a los usuarios crear objetos según el requisito y luego crear métodos para operar sobre esos objetos.
Trabajar en estos objetos para obtener el resultado deseado es el objetivo de la programación orientada a objetos.
=> Explore la serie completa de tutoriales de capacitación de C # aquí
¡Revisemos algunos de los conceptos que aprendimos en nuestros tutoriales anteriores!
Espacio de nombres
Un espacio de nombres en C # es una colección de clases. Proporciona una estructura para mantener un nombre de clase separado de otro nombre de clase declarándolos en un espacio de nombres diferente. Para que las clases con el mismo nombre no entren en conflicto entre sí.
Clase
Una clase es un plano de un tipo de datos. En realidad, es una colección de objetos. Contiene objetos y la definición de la operación que debe realizarse en ese objeto.
Objetos
Los objetos son las instancias de la clase.
En nuestros tutoriales anteriores, ya hemos aprendido sobre clases y objetos en detalle.
Lo que vas a aprender:
Conceptos de OOPS en C #
La programación orientada a objetos ofrece varias ventajas sobre otros modelos de programación como:
- El enfoque modular claro y preciso de los programas ofrece una fácil comprensión y mantenimiento.
- Las clases y los objetos creados en el proyecto se pueden utilizar en todo el proyecto.
- El enfoque modular permite que existan diferentes módulos de forma independiente, lo que permite que varios desarrolladores diferentes trabajen juntos en diferentes módulos.
En este tutorial, nos centraremos más en otros conceptos principales de OOPS:
- Encapsulamiento
- Polimorfismo
- Herencia
- Abstracción
Encapsulamiento
La encapsulación es un concepto de programación orientado a objetos que permite a los programadores envolver datos y fragmentos de código dentro de un gabinete. Al usar el programa de encapsulación, puede ocultar los miembros de una clase de otra clase. Es como rodear un elemento lógico dentro de un paquete. Solo permite información relevante disponible y visible afuera y eso también solo para miembros específicos.
La encapsulación se implementa mediante especificadores de acceso. El Especificador de acceso se usa para definir la visibilidad y accesibilidad del miembro de la clase en C #.
C # contiene los siguientes especificadores de acceso.
¿Dónde está la clave de seguridad en un enrutador?
- Público
- Privado
- Protegido
- Interno
Los especificadores de acceso definen la visibilidad de la clase y sus valores. Le permite hacer visibles los datos de una parte particular del código y ocultarlos de otra parte. La visibilidad más utilizada es pública y privada.
Echemos un vistazo a ellos.
Público: La palabra clave pública permite que sus miembros sean visibles desde cualquier lugar dentro del proyecto. Este especificador de acceso tiene la menor restricción de visibilidad.
Privado: Solo el miembro de la misma clase puede acceder a los miembros privados. Este tiene una de las visibilidad más restringidas.
Protegido: La accesibilidad protegida permite acceder al miembro desde dentro de la clase y desde otra clase que hereda esta clase.
Interno: Internal proporciona accesibilidad desde dentro del proyecto. Otra accesibilidad interna similar está protegida internamente. Esto permite lo mismo que el interno y la única diferencia es que una clase hija puede heredar esta clase y llegar a sus miembros incluso desde otro proyecto.
Polimorfismo
El polimorfismo se deriva del diccionario griego, significa uno con muchas formas. Poly significa muchos y Morph significa formas. Permite que la clase en C # tenga múltiples implementaciones con el mismo nombre.
El polimorfismo se divide básicamente en dos partes:
- Polimorfismo en tiempo de compilación
- Polimorfismo en tiempo de ejecución
# 1) Polimorfismo estático o de tiempo de compilación
El polimorfismo en tiempo de compilación también se conoce como polimorfismo estático. La sobrecarga de métodos es una de las formas en que se logra el polimorfismo en tiempo de compilación. Se conoce como polimorfismo en tiempo de compilación porque la decisión de llamada al método se toma en el momento de la compilación.
Se logra manteniendo el mismo nombre del método pero pasando diferentes conjuntos de parámetros. En la sobrecarga de métodos, el sistema primero verifica el parámetro utilizado y, basándose en el conjunto de parámetros, decide llamar al método apropiado.
Ejemplo:
|_+_|En el ejemplo anterior, hemos llamado al mismo método 'imprimir' dos veces usando diferentes parámetros. Al principio, pasamos dos enteros como parámetros, luego pasamos dos cadenas como parámetros. Hay dos métodos de 'impresión' con el mismo nombre.
Cuando pasamos un parámetro con el sistema de enteros, buscará el método llamado 'print' que acepta dos parámetros enteros y lo ejecutará ignorando otros métodos con el mismo nombre.
En la segunda parte, pasamos el parámetro de cadena. Nuevamente, el sistema buscará el método que acepta dos parámetros de cadena. Por lo tanto, según los parámetros pasados, el primer método agregará dos números enteros y el siguiente concatenará dos cadenas.
# 2) Polimorfismo dinámico o polimorfismo en tiempo de ejecución
El polimorfismo en tiempo de ejecución o el polimorfismo dinámico se produce cuando tanto el nombre del método como la firma del método tienen el mismo nombre y parámetros. La anulación de método es un ejemplo de polimorfismo dinámico. Permite al usuario crear una clase abstracta con implementación de interfaz parcial.
La invalidación del método se logra mediante la herencia. Para lograr la anulación del método, tanto la clase base como la clase derivada deben tener el mismo nombre y parámetro. Durante el tiempo de compilación, el compilador no es capaz de reconocer el método de reemplazo, por lo tanto, no arroja ningún error. La decisión de ejecutar un método se toma durante el tiempo de ejecución.
Ejemplo:
|_+_|Si ejecutamos el programa anterior obtendremos el siguiente resultado:
|_+_|Aunque la clase Execute ha heredado todos los métodos de la clase Program, pero cuando llamamos al método print que está presente en ambas clases, el método presente en la clase secundaria anulará el método de la clase principal.
El polimorfismo dinámico se utiliza para implementar la abstracción. Permite al usuario crear una clase abstracta que se utiliza para proporcionar una implementación para una interfaz cuando es heredada por una clase derivada. La clase abstracta puede contener nombres / firmas de los métodos y la clase derivada puede tener una definición más especializada para el método.
Herencia
La herencia es una parte importante del concepto OOPS. En herencia, definimos clases padre e hijo. La clase secundaria puede heredar todos los métodos, objetos y propiedades de la clase principal. Una clase secundaria también puede tener sus propios métodos y una implementación específica.
La clase principal también se conoce como clase base y la clase secundaria que hereda la clase base también se conoce como clase derivada.
Ejemplo:
|_+_|Aquí, tenemos una clase nombrada como un programa que tiene un método. Tenemos otra clase Ejecutar que hereda la clase Programa. La clase Execute es la clase derivada y el programa de clase se conoce como clase base.
Ahora, en lugar de crear una instancia de objeto para el programa de clase, hemos creado una instancia de objeto para la clase Execute. Usando esta instancia podemos acceder al método de impresión desde la clase base.
Entonces, la salida del código anterior será:
|_+_|La clase derivada no solo hereda métodos, también hereda casi todos los miembros de la clase como campos, propiedades, etc., dependiendo de la visibilidad. La herencia en C # no permite el uso de herencias múltiples, es decir, una clase no puede heredar de varias clases diferentes, sin embargo, una clase puede heredar de otra clase que puede heredar de una clase diferente.
Abstracción
La abstracción es uno de los principales principios de la programación orientada a objetos. La abstracción permite al programador mostrar al mundo solo los detalles necesarios mientras oculta los demás. La abstracción se logra en C # mediante el uso de la clase y la interfaz Abstract.
Una clase se puede declarar como una clase abstracta utilizando la palabra clave 'Abstract'. La clase abstracta en C # es siempre la clase base en la jerarquía. Lo que los diferencia de la otra clase es que no se pueden instanciar. Es necesario heredar una clase abstracta de C #.
Ejemplo:
|_+_|El resultado de lo siguiente es:
|_+_|Si lo compara con nuestros ejemplos anteriores durante la herencia o el polimorfismo dinámico, encontrará las similitudes. La diferencia más reconocible es el uso de palabras clave abstractas antes de la clase Coche. En caso de que desee anular esto o proporcionar su propia implementación similar a lo que hicimos en polimorfismo dinámico. Entonces puede lograrlo de la siguiente manera.
|_+_|Entonces, si ejecuta este código ahora, dará el siguiente resultado:
|_+_|El método de la clase derivada anula el método de la clase base. De esta manera, puede crear una clase derivada diferente como Ferrari, Porsche, BMW, etc. con sus propios métodos de implementación.
Si observa de cerca, puede ver que nuestro método de descripción en la clase abstracta no contiene ninguna implementación.
Entonces, ¿por qué estamos definiendo métodos vacíos?
Esto se debe a que una clase abstracta proporciona una firma de los métodos y hace que sea una obligación para las subclases crear una implementación para todos estos métodos. Esto permite compartir la clase base pero, al mismo tiempo, también controla la implementación del método de la clase derivada.
Interfaz
En C #, la interfaz es el modelo de una clase. La interfaz es similar a una clase abstracta y se utiliza para lograr una abstracción del cien por cien. Todos los métodos descritos dentro de la interfaz son abstractos por defecto. No tiene ningún cuerpo de método y no se puede crear una instancia.
La interfaz se utiliza principalmente para lograr una herencia múltiple y una abstracción completa. Toda la firma de método declarada dentro de la interfaz debe estar provista de implementación desde la clase o la estructura que la implementa.
Ejemplo:
|_+_|La salida del código anterior será:
|_+_|Aquí, hemos creado una interfaz Car. Como la interfaz no puede tener ninguna definición de método, acabamos de proporcionar el nombre del método y el tipo de retorno en la interfaz. Luego implementamos la interfaz Car a otra clase Hyundai. En la clase implementada proporcionamos la definición de los métodos definidos dentro de la interfaz.
Conclusión
En el concepto de programación orientada a objetos, cada parte del programa se trata como un objeto. La clase es una colección de tipos similares de elementos y un objeto es la instancia de la clase.
La encapsulación en C # permite al usuario establecer la visibilidad de la clase y sus miembros. El polimorfismo permite que los métodos tengan el mismo nombre pero con diferentes parámetros dentro de la misma clase o con el mismo parámetro en una clase diferente.
La herencia es cuando una clase secundaria, que también se conoce como clase derivada, hereda todas las propiedades, incluidos métodos, objetos, campos, etc. de la clase principal, que también se conoce como clase base. La abstracción permite que el programa muestre solo la firma mientras oculta los detalles de implementación.
Programa consolidado
|_+_|=> Explore la serie completa de tutoriales de capacitación de C # aquí
Lectura recomendada
- OOP Java: Introducción a la programación orientada a objetos en Java
- Programación orientada a objetos en C ++
- Tutorial de Unix Pipes: Pipes en la programación Unix
- Tutorial de Python DateTime con ejemplos
- Repositorio de objetos en QTP - Tutorial n. ° 22
- Conceptos de Python OOP (clases, objetos y herencia de Python)
- Tutorial # 7 de QTP - Paradigma de identificación de objetos de QTP - ¿Cómo identifica QTP los objetos de forma única?
- Aprenda los conceptos avanzados de secuencias de comandos de SoapUI Groovy - Tutorial de SoapUI n. ° 9