Tengo muchos amigos que provienen de la ingeniería eléctrica / física / mecánica, y tienen curiosidad acerca de qué se trata "OOP". Todos conocen a Matlab bastante bien, por lo que tienen conocimientos básicos de programación; pero les resulta muy difícil comprender un sistema de tipo complejo que puede beneficiarse de los conceptos que introduce OOP.
¿Alguien puede proponerme una forma de intentar explicárselo? No estoy familiarizado con Matlab, así que tengo problemas para encontrar paralelos. Creo que usar ejemplos simples como formas o animales es demasiado abstracto para esos ingenieros. Hasta ahora he intentado usar una interfaz Matrix frente a implementaciones basadas en matriz / dispersas / lo que sea, pero eso no funcionó tan bien, probablemente porque los diferentes tipos de matriz ya están bien soportados en Matlab.
fuente
Respuestas:
Desde 2008, Matlab admite programación orientada a objetos. Por lo tanto, si desean obtener información sobre OOP de una manera que estén familiarizados, pueden consultar la documentación de Matlab sobre OOP , especialmente los ejemplos .
Hace un tiempo, estaba presentando a algunos de mis colegas que usan Matlab a OOP. Aquí hay algunos ejemplos que usé.
Es importante destacar que todo lo que haces con OOP, también puedes hacerlo de otra manera. Lo que OOP le permite es (1) crear estructuras más impresionantes, (2) código de paquete y (3) facilitar la modularización del código y la programación más rápida.
Estructuras con campos que se actualizan automáticamente. Por ejemplo, almacena una coordenada en píxeles (porque la mide en una imagen), pero para los cálculos de distancia, desea tenerla en micras. Almacenar ambos en una estructura es problemático, porque si cambia uno, no debe olvidar cambiar el otro (y lo hará). Por lo tanto, elige almacenar todas las coordenadas en micrones, lo que significa que cada vez que lo necesita en píxeles, tiene que convertir, lo cual es molesto y puede ser propenso a errores.
Con un objeto, convierte "coordenadas en píxeles" en una propiedad dependiente, la conversión se vuelve automática y no tiene que preocuparse por actualizar dos coordenadas al mismo tiempo. Por supuesto, puedes hacer mucho más. Por ejemplo, su estructura podría tener un método 'editar', que abre una GUI, para que pueda editar fácilmente los valores. O puede tener un método de salvar que se llama cada vez que cambia un valor en la estructura.
Puede agrupar funciones con su estructura de datos. Por ejemplo, puede tener una función de trazado personalizada para los datos que llama
plot(myDataStructure)
. Del mismo modo, puede tenerdisp
métodos personalizados , o incluso tener sus métodos de procesamiento de datos adjuntos a sus datos.fuente
struct
con métodos es mucho más atractivo que los de Matlab.struct
C tiene características OOP fundamentales de las que carecen las clases de Matlab?No intentes encontrar un ejemplo de puente. OOP es muy adecuado en áreas completamente diferentes a las del 'código de estilo matlab' (y viceversa). Iría por el mismo tipo de explicación que le daría a alguien que sabe un poco acerca de la programación de procedimientos pero que nunca ha trabajado con estructuras o estructuras de datos similares.
fuente
El código MATLAB vectorizado tiene una sensación muy funcional y declarativa, donde las matrices se ven con frecuencia como muestras en algún espacio, y las operaciones en esas matrices como transformaciones de ese espacio. Cuando un fenómeno, proceso o entidad se modela utilizando MATLAB (vectorizado), a menudo existe una representación numérica explícita que opera como intermediario entre la lógica del programa y los elementos conceptuales de la entidad que se está modelando. Como resultado, las complejidades en el dominio del problema tienden a reflejarse como una complejidad numérica, en lugar de la complejidad de la lógica del programa o el flujo de control.
El paradigma orientado a objetos tiene una sensación muy diferente: se usa con frecuencia junto con un enfoque mucho más directo para modelar relaciones estructurales en el mundo. En muchos casos, el programa OO es un modelo directo de una entidad, donde las construcciones lógicas del programa reflejan, directa o indirectamente, los atributos y propiedades del sistema que se está modelando. Como resultado de esto, la lógica del programa OO tiende a tener más "profundidad" estructural (y posiblemente complejidad), ya que refleja más directamente las complejidades del sistema bajo prueba.
Dicho esto, hay muchas situaciones en las que el paradigma de modelado de objetos está muy bien alineado con la forma en que se entiende y describe un problema en particular. Este es particularmente el caso cuando uno intenta modelar entidades discretas con una gama más diversa de atributos y comportamiento, de modo que considerar cada entidad individualmente y de forma aislada es más informativo que considerar cada propiedad individualmente, y las entidades juntas como una población.
Con OOP, pasa tiempo pensando en entidades individuales y sus propiedades. El comportamiento colectivo es más difícil de visualizar y observar. Las estructuras y las relaciones tienden a expresarse explícitamente en código.
Con MATLAB vectorizado, pasa tiempo pensando en poblaciones de entidades. El comportamiento colectivo es más fácil de observar. Las estructuras y las relaciones tienden a expresarse implícitamente en el código.
fuente
La mayoría de los programadores están familiarizados con un aspecto importante de la programación orientada a objetos, la estructura. Explicaría que un objeto es como una estructura, pero tiene sus propias llamadas de función para tratar con los datos dentro de la estructura. Luego, agregue lentamente detalles adicionales, como herencia, pasar funciones, etc.
fuente
Entonces es bastante simple: déjelos probar simulink. Los modelos Simulink están en espíritu OOP. Si entienden cómo crear un modelo de simulink, y si saben cómo funciona simulink, entonces ya saben de qué se trata OO.
fuente
Matlab es solo un idioma. OOP es el concepto.
Intente explicar los conceptos utilizando una explicación menos orientada a ejemplos. Los ingenieros ciertamente entienden diferentes dominios y unidades (por ejemplo: agregar temperatura a la distancia sería extraño), por lo que deberían entender intuitivamente la encapsulación y el polimorfismo sin necesitar ejemplos concretos en Matlab. Deberías poder explicar la abstracción con bastante facilidad. La herencia y la composición serían más difíciles de explicar sin ejemplos, pero explique el concepto claramente y deberían entenderlo.
La especificidad genérica versus tipo debe motivarse a través de ejemplos de sus antecedentes matemáticos. La programación funcional, las funciones de paso y las lambdas no son OOP per se, y eso es más difícil de explicar sin un fondo matemático más abstracto que generalmente se presenta a los ingenieros (después de estudiar ingeniería, software y matemáticas, tengo una idea de sus diferentes especializaciones).
Es posible que no pueda proporcionar ejemplos usando Matlab directamente, pero ciertamente podría explicar la abstracción y la encapsulación usando ejemplos que incluyen estructuras. Incluso en idiomas en los que no puede encapsular sus funciones (métodos) con sus datos, aún puede explicar cómo ciertas funciones solo se definen para ciertos dominios.
Teniendo en cuenta que muchos desarrolladores valoran la composición sobre la herencia, podría explicar la herencia, la composición y los méritos relativos de los dos.
Podría motivar el polimorfismo de forma natural al revisar la diferencia entre enteros, racionales, reales y números complejos, y luego explicar cómo los operadores aritméticos "normales" son funciones (métodos), aunque el operador (ex '+') se ve igual, es una función diferente cuando se usa con diferentes dominios.
¡Buena suerte!
fuente
Soy ingeniero eléctrico, pero tengo más en común con los programadores de CS que con los programadores de EE. Específicamente, he intentado, sin éxito, persuadir a mis compañeros de estudio para que escriban al menos código estructurado y modular a mitad de camino, y mucho menos código orientado a objetos.
Cuando intenté usar las funciones OO de MATLAB, rápidamente me encontré con problemas muy molestos. Un método en una clase TIENE que tomar un objeto de esa clase como su primer argumento, y TIENE que devolver el objeto si está modificando el objeto. Eso hace que el código como
y uso como
Casi me he rendido. Te sugiero que los dejes en paz, hasta que un poco de soporte OO decente entre en MATLAB. Pídales que renuncien a MATLAB e intenten usar Python o similares. Estoy intentando (y no puedo) hacer eso.
Por lo menos, MATLAB OO no es de ninguna manera una buena puerta de entrada para aprender OO. Podrías posponerlos de por vida.
fuente