¿Cómo podemos dominar mejor las ideas de programación orientada a objetos (oop)?
¿Qué es la orientación a objetos? ¿Puedes decirme la respuesta (creo que no hay una respuesta correcta)? Creo que la orientación a objetos es sólo una herramienta en ingeniería de software. Entonces, ¿cuál es el propósito de la ingeniería de software? El objetivo es escribir productos de software que sean confiables, eficientes, flexibles, fácilmente escalables y reutilizables. Dado que la orientación a objetos es una herramienta en la ingeniería de software, el propósito de utilizar la orientación a objetos también debe ser este. Es decir, nuestro propósito al utilizar la orientación a objetos es escribir productos de software que sean confiables, eficientes, flexibles, fáciles de expandir y reutilizables. Debemos aprender y utilizar la orientación a objetos con este propósito en mente, de lo contrario perderemos el rumbo. La mayoría de las veces, cuando hablamos de orientación a objetos, hablamos principalmente de la orientación a objetos en sí, pero no de cómo utilizar la orientación a objetos para resolver problemas reales. Esto puede engañar fácilmente a los principiantes. Junto con las hermosas palabras, muchas personas piensan que mientras estén orientadas a objetos, todo estará bien. Por ejemplo, te daré la mejor arma, te enseñaré cómo usarla y después de un tiempo sabrás todo sobre ella. Ahora les pido que vayan a disparar, y de 100 balas, ninguna impactó. Oye, ¿no usé la mejor arma? ¿Por qué no puedo hacer ni un solo tiro? Como no conoces los conceptos básicos del tiro y cómo apuntar a la diana, el resultado es, por supuesto, predecible. Queremos POO (Programación Orientada a Objetos), no POO (Programación Orientada a Objetos).
La orientación a objetos tiene tres características principales (en términos generales, la orientación a objetos mencionará estas tres), herencia, encapsulación y polimorfismo. Literalmente entendido, es un concepto completamente nuevo para nosotros, pero si lo analiza, encontrará que estos son conceptos que usamos a menudo en programación.
¿Qué es la encapsulación? ¿El concepto de encapsulación está solo orientado a objetos? No, mientras sea un programa, está encapsulado. Las variables y funciones que todo el mundo utiliza a menudo son la encapsulación. Por ejemplo, si escribe una función para obtener el estado del usuario, la lógica para obtener el estado del usuario está cerrada al programa que llama a esta función, por lo que cuando la lógica cambia, no afectará al programa que llama. Las variables también están encapsuladas. Cuando define una variable int, no importa qué valor le asigne, será un valor de tipo entero para el programa que llama a la variable. Cuando se trata de encapsulación, tenemos que mencionar las interfaces, porque la encapsulación es el proceso de creación de interfaces. ¿Cuál es la interfaz? ¿Es una interfaz sólo si se utiliza la palabra clave interfaz? La definición en el diccionario es superficie de contacto e interfaz de objetos. El mundo está formado por objetos, por lo que las interfaces están en todas partes de nuestras vidas. Ves una bola, es redonda y el círculo es la interfaz. Nuestros programas también se componen de interfaces, tipos de datos, palabras clave, funciones, variables, etc. Por ejemplo, cuando ve la palabra int, sabe que es un tipo de datos entero. Podemos decir: int es la interfaz del tipo de datos entero. Por lo tanto, la encapsulación y la interfaz no son conceptos exclusivos de la orientación a objetos, pero su alcance se ha ampliado en la orientación a objetos. A menudo vemos discusiones en Internet entre orientación a objetos y orientación a procesos, diciendo cuál es mejor. De hecho, estos no son importantes, porque cualquier método que se utilice es el proceso de creación de una interfaz. La clave es que los programadores que utilizan estos métodos vean cómo son sus capacidades de abstracción.
El polimorfismo puede ser el concepto más difícil de entender para nosotros. La palabra polimorfismo es difícil de encontrar si no has estudiado orientación a objetos. De hecho, este también es un concepto que usamos a menudo, pero simplemente no lo nombramos (al menos no usamos polimorfismo para nombrarlo). Mira el siguiente ejemplo, double a = 0,b=5,c=0;
a = 1;
c = a + b;
cout << c << endl;
a = 3.5f;
c = a + b;
cout << c endl;
El resultado de salida es
6
8.5
Primero definimos tres variables, a, b, cy asignamos los valores 1 y 3.5 a A sucesivamente. Luego genere el resultado de a+b. Puede ver que la misma lógica producirá diferentes resultados de salida a medida que cambie el valor de a (efecto polimórfico).
Aquí double es un tipo alto (equivalente a la clase principal), y 1 y 3.5 (int, float) son tipos bajos (equivalentes a una subclase). Este ejemplo es polimorfismo variable. ¿Hay algún ejemplo de polimorfismo de función? Por supuesto que sí. Cualquiera que haya escrito C conoce los punteros de función, que son polimorfismo de función.
Finalmente hablemos de objetos, el punto clave está aquí~ Primero, una clase es un módulo. En el pasado, nuestro módulo era un archivo, como .c, .cpp, etc. No existen restricciones sobre qué funciones funcionales se pueden escribir en un archivo de módulo (en teoría, no existe una definición clara de cómo escribirlas) y estas funciones funcionales deben implementarse de acuerdo con la experiencia del desarrollador. Por lo tanto, es fácil escribir supermódulos (hay docenas o cientos de funciones en un archivo) y es muy inconveniente mantener el código. La orientación a objetos resuelve muy bien este problema. Los programadores que hayan leído la teoría básica de la orientación a objetos sabrán que primero deben definir una clase y luego colocar funciones relacionadas en la clase. Hay un principio en la orientación a objetos, el principio de responsabilidad única de clase. Si sigues este principio, puedes escribir buenos módulos. Más importante aún, también es muy conveniente para nosotros comunicarnos y mantenernos. Por ejemplo, la comunicación puede haber sido así en el pasado, modificando una determinada función en el archivo customer.cpp, puede modificar un determinado método. de la clase de cliente. Esto es muy importante porque está estrechamente relacionado con el pensamiento humano. Por ejemplo, cuando vamos a un restaurante a comer y le dices al camarero quiero una botella de cerveza, estoy seguro de que el camarero te volverá a preguntar: Señor, ¿qué marca de cerveza quiere? Pero si dices: quiero una botella de cerveza Budweiser, el camarero definitivamente no te la volverá a pedir. Si piensas en un sistema como una línea de producción, las clases son trabajadores. Un trabajador solo es responsable de una operación, A es responsable de perforar agujeros, B es responsable de instalar tornillos y C es responsable del embalaje. Esto es muy eficiente y, si algo sale mal, es fácil identificar con qué trabajador está el problema. En segundo lugar, una clase es un tipo de datos personalizado. Una vez que comprenda esto, su pensamiento se volverá más claro y no se sentirá ajeno a la orientación a objetos. Mire el ejemplo simple a continuación,
//Calcular la suma de dos números
doble suma(doble a,doble b);
int _tmain(int argc , _TCHAR* argv[])
{
doble a=0,b=0;
a = 1;
b = 2;
cout << suma(a,b) << endl;
a = 1.2f;
b = 2.3f; p >
cout << sum(a,b) << endl;
return 0;
}
//Calcular la suma de dos números
doble suma(doble a,doble b)
{
devuelve a+b;
}
En el ejemplo, int y float de tipo bajo se asignan a double de tipo alto y luego se usa su función de suma. Si el lenguaje de programación no admite esta conversión, tenemos que escribir dos funciones,
//Procesar el cálculo de int
int sum(int a, int b); p> p>
//Procesando el cálculo de float
float sum(float a, float b);
Entonces podemos estar seguros: entre el mismo tipo, solo Se proporciona de menor a mayor. La conversión de tipos puede lograr efectos polimórficos (no sé cuál era el concepto antes de la orientación a objetos). Por supuesto, las clases como tipos de datos también requieren este tipo de conversión. Pero la clase es un tipo personalizado, por lo que debemos definir cuál es el tipo alto y cuál es el tipo bajo: la clase principal es el tipo alto y la subclase es el tipo bajo (así nació la herencia: )). La herencia nos permite reutilizar código de las clases principales, pero en este ejemplo podemos ver que su objetivo principal es el polimorfismo.
Arriba hemos hablado de la orientación a objetos y sus tres características. Podemos ver que estos son conceptos que se utilizan a menudo en programación.
Creo que el mayor avance es que nos proporciona nuevos modelos de pensamiento, nuevas estructuras de organización de código y define conceptos previamente vagos en el diseño de software (como el polimorfismo). Entonces, ¿cómo cambiamos nuestra forma de pensar? Piense en usted mismo como el director de una empresa. Ahora eres el director de una empresa, los departamentos son subsistemas y los empleados son objetos. Todo lo que necesitas hacer es esto:
-Habrá muchas cosas con las que tendrás que lidiar todos los días, así que prepárate mentalmente.
-¿A qué se dedica la empresa?
-¿Cuántos departamentos deberían establecerse? , estipulando reglas de comunicación entre departamentos.
-¿Qué tipo de puestos se necesitan? ¿Qué hace cada puesto?
-Especificar el proceso de negocio. ¿Qué departamentos deben participar en el proceso de negocio? ¿Qué empleados deben participar? ¿Cómo se comunican entre sí?
-Aprender de los modelos de gestión exitosos, pero asegurarse de que se ajusten a las circunstancias de la empresa y no utilizarlos a ciegas porque el coste es demasiado alto.
-No establezcas demasiados enlaces de comunicación. Mantenlo lo más simple posible, siempre y cuando completes el objetivo.
-Esté preparado para el cambio. No hay bien ni mal en el mundo, siempre hay una corrección constante a medida que avanzamos.
¿Eso es todo? Bueno, la razón es muy sencilla, pero es muy difícil ser una buena empresa porque hay demasiadas variables. Lo mismo ocurre con la orientación a objetos, requiere esfuerzo para hacerlo bien.