This video provides an introduction to object-oriented programming, explaining its prevalence in modern software development. It details the process of problem-solving using this paradigm, focusing on abstraction and the interaction of objects to achieve solutions. The video also covers key concepts like inheritance, polymorphism, and object relationships.
+ (public), - (private), and # (protected) access modifiers is explained in the context of attributes and methods.[Música] i saludos a todos vamos a continuar con nuestra programación en la tecnología orientada a objetos y en esta ocasión el vídeo trata sobre el enfoque orientado a objetos que es el que como hemos dicho anteriormente es el que más predomina en estos momentos al momento de desarrollar productos de software como también lo hemos hablado en el mundo existen una serie de problemas en el mundo real una serie de problemas que hay ciertos actores que son quienes resuelven estos problemas basándonos en ese paradigma es que la programación orientada a objetos se basa para formular todas sus premisas la forma en cómo estos actores o estos objetos colaboran entre sí para poder desarrollar una solución o para dar solución a un problema determinado es lo que nosotros nos debemos de enfocar luego de analizar el problema nosotros tenemos que hacer una abstracción de ese problema es decir tomar de esa realidad los elementos que son importantes para poder desarrollar dicho problema y darle una solución oportuna como podemos ver en la presentación pues tenemos un problema este problema debe de modelarse es decir para poder extraerlo y para eso es que vamos a contar con herramientas que me van a permitir hacer esto luego que ustedes conocen él problema real entonces ese problema debe pasarse a los usuarios finales a los acreedores del proyecto a los desarrolladores a los analistas a todos mediante un lenguaje común que les permita comunicarse y definir si son los requerimientos adecuados para poder solucionar el problema bien antes por la década de los 60 más o menos cuando los programadores comenzaban a hacer sus desarrollos el código se le llamaba código espagueti porque se le llamaba código espagueti pues porque en ese momento no habían reglas claras en la forma en cómo nosotros en los desarrolladores deberían de programar un programador hacía un salto desde la línea 1 a la línea 25 de la línea 25 a la línea 7 y así sucesivamente no había un orden lógico coherente o no existían más bien reglas o estándares que dijeran debemos de hacerlo de esta y esta manera luego vienen los nuevos programas de desarrollo los nuevos lenguajes de programación y con un nuevo paradigma con el paradigma estructurado vienen y hacen lo que se les llama descomposición funcional es decir se ve como el dato va pasando de un estadio a otro estadio y se crean las funciones se crean los procedimientos etcétera esto da lugar a la segunda y a la tercera generación de código donde ya el código es un poco más ordenado ya se hacen funciones o procedimientos en base a un dato como éste va pasando pero igual esto funcionaba muy bien para problemas que eran pequeños pero cuando se comienza a ver la complejidad de problemas o sea que hay que enfrentar o que hay que codificar entonces hay necesidad de hacer una nueva revolución en la forma en cómo ese programa es por eso que en la cuarta generación se descompone en base a objetos es decir en base a cómo se colabora para poder desarrollar la solución pertinente al problema que se nos ha dado y así es como ha venido evolucionando el desarrollo de la programación en el mundo real existen diversidad de objetos estos objetos o sea tienen una descripción esa descripción de los objetos se da a través de lo que llamamos atributos por ejemplo en el caso que podemos observar tenemos un automóvil este automóvil tiene un color que lo describe en este caso rojo un año de fabricación 2000 y un tipo de transmisión y es automática o es mecánica va a depender del auto también tiene ciertos métodos es decir qué cosas él puede hacer un automóvil pues puede acelerar puede frenar etcétera hay muchas actividades o muchos verbos que el objeto puede hacer además este objeto tiene ciertas cosas que están ocultas y que no son necesarias que el usuario del automóvil las conozca o las tenga que ver como para que el objeto haga lo que debe de hacer por ejemplo el motor no es necesario que nosotros conozcamos cada parte del motor o cómo funciona cada parte del motor para poderlo utilizar nosotros simplemente tomamos el automóvil y manejamos o frenamos lo mismo el sistema eléctrico sabemos que tenemos que apretar un botón para que las luces enciendan en el caso de que haya lluvia o sea de noche para la conducción entonces todos los objetos van a tener estos estos factores de estos hechos atributos van a tener métodos y van a tener cosas que van a ser ocultas hacia el usuario que va a utilizar el objeto o hacia los otros objetos que van a interactuar con este objeto como lo dice a y como lo hemos repetido en el mundo real existen una diversidad de objetos o sea que interactúan entre sí para solucionar un problema para lograr y obtener esos requerimientos de qué es lo que nosotros vamos a tomar de esa realidad y que no hay un proceso que se le llama abstracción y tiene que ver con esta fotografía que ustedes pueden ver acá que muchos psicólogos la utilizan para evaluar la persona de la de la de las personas en este caso se muestran figuras abstractas y cada persona pues de acuerdo a su imaginación dice ah esto es tal objeto o tal figura no todos coinciden en que sea el mismo tipo de figura el que el psicólogo le está mostrando lo mismo sucede con los programadores por ejemplo si a un programador alguien de una veterinaria le encargase un sistema para llevar el control de las mascotas muy probablemente se va a fijar en ciertos aspectos que un programador que le hayan dado la tarea de hacer un sistema para elaborar prendas para vestir mascotas y la abstracción en ambos casos a pesar de que vamos hacia el mismo mundo de los animales para poder hacer algo para ellos la abstracción que cada uno de estos programadores va a ser del problema va a ser totalmente distinto veamos este otro ejemplo el enfoque orientado a objetos permite algo que se llama la abstracción tal como ya lo hemos mencionado que es lo que me permite la abstracción pues y reducir la complejidad del mundo real es decir no debemos de tomar todos los elementos o sea que nosotros tenemos de ese marco problema luego vamos a separar el comportamiento de ese objeto de la implementación tal y como sucede en el auto hay cosas o sea que no deben de ser vistas pero hay cosas que si por ejemplo un botón para poder encender también nosotros debemos de saber qué se hace y no como lo hace en el caso de este ejemplo que tenemos acá un termómetro pues sabemos que mide la temperatura ahora cómo mide la temperatura pues es algo que como usuario pues no nos interesa al menos como usuarios finales de un termómetro para verificar qué tan alta está nuestra temperatura en el caso que tengamos una enfermedad no sabemos si hay que calibrar no sabemos mayor cosa sobre el níquel líquido pueda contener etcétera entonces eso es abstraer ocultar ciertas cosas que no son importantes para el usuario pero que son importantes para que funcione con el advenimiento de las nuevas tecnologías también nacen nuevos lenguajes de programación dando respuesta a los problemas o sea qué significaba a que el código es padre de ti ya que el código funcional y a partir de 1965 más o menos se crea el primer lenguaje que es orientado a objetos en este caso se llama simular a partir de ese lenguaje de programación comienzan a formarse otros lenguajes como es mortal temas más que es el que se le considera como el padre de los lenguajes orientados a objetos y del cual pues se derivan básicamente todos los demás que ustedes pueden observar allí el hit de richar ya va python que son lenguajes que en la actualidad forman el grueso de programadores en el área de orientado a objetos veamos estas características propias de lo que es el enfoque orientado a objetos ya hemos hablado de la abstracción verdad o sea que es obtener de la realidad los elementos necesarios para resolver el problema también necesitamos encapsular es decir tengamos segmentos de código que puedan ser administrables en diferentes proyectos por eso como una cápsula no luego tenemos ocultar ya donde pues hay ciertas cosas a que el usuario final no debe de saber alguien que desarrolle una clase por ejemplo no quiere que se cambie o no quiere que se sepa cuál es un modelo de negocio por ejemplo que está implementado en una clase entonces eso se oculta también la parte de polimorfismo es decir si algo se llama por ejemplo suma entonces no tengo por qué crear algo que se llama suma de enteros suma de valores flotantes sumas de cadenas de caracteres suma es suma entonces el polimorfismo me provee eso no importa qué es lo que yo vaya a sumar siempre se va a llamar suma y algo que es muy importante y que existe en la base de la programación orientada a objetos es la herencia la herencia pues les permite la reutilización del código es decir hay una superclase de la cual se derivan otras clases que implementan tanto atributos como métodos de esa clase de la cual se derivan estos son elementos muy importantes o sea dentro de la estructura del enfoque orientado a objetos veamos este ejemplo de herencia en este caso tenemos una superclase que se llama persona donde probablemente tendrá un atributo de su nombre y su apellido luego para cada uno de la siguiente línea ustedes pueden a ver que hay comerciantes hay artistas hay dentista probablemente el dentista va a tener un código de doctor el artista probablemente algo un museo en el cual pues él exhibe sus obras hay un comerciante pues no probablemente no va a necesitar eso lo mismo artista pues podemos seguirlo sobre dividiendo y cada una de las líneas hacia abajo pues va a ir aumentando en complejidad tanto elementos atributos para describir las clases como métodos que pueden hacerlo hasta llegar a la última línea por ejemplo ahí tenemos los objetos propiamente dichos por ejemplo louis es un objeto del tipo ceramista y juan es un objeto del tipo pintor veamos esta definición de la programación orientada a objetos es un paradigma verdad que me va a permitir a mí organizar en ciertas colecciones por así decirlo de objetos cada uno de los cuales va a representar una instancia de una clase o de varias clases y estos van a estar vinculados de alguna manera mediante un cierto tipo de relaciones que mucho más adelante van a poder ser estudiadas a mayor detalle estas relaciones pueden ser de herencia tal como ya lo vimos en el ejemplo anterior también pueden ser de asociación como lo vamos a ver un poco más adelante existe una diversidad de herencia de composición etcétera que vamos a ir estudiando en el transcurso del curso también es necesario que nosotros tengamos cuidado cuando nosotros vamos a declarar los tipos de acceso de ya sea de los métodos o de los atributos y siempre va a haber una nomenclatura que hay que seguir por ejemplo el símbolo de + indica que ese es un atributo o un método de acceso público es decir cualquiera puede hacer uso de ese atributo o ese método normalmente los métodos se definen como públicos al contrario del signo menos que significa privado es decir solamente esa clase en la cual está declarado puede hacer uso de ese método o de ese atributo y cuando nosotros estamos también trabajando con herencia podemos tener el acceso protegido es decir todas aquellos objetos o clases que se deriven de la clase de una superclase hereda esos atributos y esos métodos que pueden ser utilizados por ellas también en código o ml por ejemplo tenemos la forma de representar estas clases y va a ser un cuadrado subdividido en al menos tres secciones en la cual en la primera sección ustedes tienen el nombre de la clase luego tienen la lista de atributos y a continuación los métodos o las acciones que este objeto puede hacer por ejemplo acá tenemos una clase que se llama orden ya que tiene una fecha del tipo de ait también tiene un estatus de esa orden probablemente en la orden de compras un estatus verdad digestiva despachada o no está pendiente está en revisión y cuáles son los métodos o sea que esa orden puede ejecutar pues puede calcular un impuesto puede calcular el total a pagar puede calcular el peso total de esa orden que va a ser enviada a equis usuario oa equis cliente entonces ahí tenemos algunos de los elementos que son necesarios que recordemos al momento de diseñar nuestras clases y otros conceptos que ustedes pueden ver es esto un objeto es algo que nosotros podemos manipular es básicamente como una variable que nosotros tenemos y en cambio la clase es como agrupar ya y todo dentro de un tipo de datos especiales así como existen los tipos de datos enteros flotantes cuando nosotros creamos una clase básicamente estamos haciendo eso creando un tipo especial de datos que luego su instancia se convierte en un objeto las relaciones o sea que se dan entre los diferentes objetos tienen varias connotaciones entre ellas pues me permite representar cómo se da la interacción entre los diferentes objetos o sea que están interactuando para resolver el problema por decirlo así tenemos el objeto estudiante que está relacionado con un objeto que se llama carrera entonces cuál es la relación que existen entre el objeto estudiante y el objeto carrera pues que un estudiante se inscribe o matricula una carrera por ejemplo o varias carreras dependiendo de la política de una universidad o de un instituto también verdad me permite comprender ciertas propiedades a partir de las clases o de otras clases en el caso que teníamos anteriormente verdad entonces sé que el objeto alumno pues va a tener atributos que tienen que ver con la clase carrera al menos el código de la carrera para poder hacer la relación directa con ese otro objeto algunos ejemplos de relaciones o sea que ustedes pueden ver son las de asociación la de herencia estas dos quizás son las más importantes para que nosotros las conozcamos luego tenemos la de agregación y la de instancia ción y éstas no mucho se utiliza ya porque pues se da por sentado de que las clases pues serían lo que son objetos y un objeto sabemos que su definición más corta es la instancia de una clase bien veamos este ejemplo sobre asociación por ejemplo nosotros tenemos una línea aérea la línea era interactúa con personas estas personas o sea también hay objetos vuelo dentro de ese contexto de la aerolínea y tenemos aviones estos serían de una forma muy muy reducida verdad estos cuatro elementos o sea dentro de ese este mundo que vamos a modelar entonces estas relaciones se pueden dar entre una línea aérea y una persona también entre una persona y un vuelo y el vuelo y el avión como se puede dar pues una línea aérea emplea a personas también una persona es asignada a un vuelo en específico es decir azafatas pilotos ya que pueden ser algunos objetos derivados de la clase persona y por ejemplo tenemos el vuelo a 2501 por ejemplo verdad y también un bueno se asigna a un avión probablemente o si el avión está en mantenimiento pues se va a asignar a otro avión entonces aquí tenemos un ejemplo de asociación y también hay algo que se llama cardinali that es decir cuántas veces el objeto puede interactuar con el otro objeto en este caso tenemos que una línea aérea cuántas personas pueden contratar emplea en este caso pues muchas y por eso ustedes tienen allá la primera anotación 1 punto punto asterisco eso indica que una línea era emplea a muchas personas pero una persona en cuanto a las líneas aéreas puede estar contratada en este caso la relación es de 1 a 1 no puede estar contratada por más de una línea aérea en el mismo caso tenemos las personas que se asignan al vuelo una persona puede ser asignada a muchos buenos en un vuelo pues hay también muchas personas y lo mismo pasa ahora un vuelo se asigna a un solo avión no puede ir dos aviones con el mismo tipo de vuelo y viceversa entonces este es un ejemplo de asociación y de relación de asociación verdad más bien dicho entre diferentes objetos que interactúan en un problema dado otros conceptos que ustedes deben de manejar y que los hemos estado hablando por ejemplo desde el concepto de la superclase que es como la clase mayor verdad o sea de la cual se derivan todas las demás es decir las clases derivadas o subclases herencia simple cuando nosotros tenemos que de una clase depende otra clase la herencia múltiple que normalmente no se da en los lenguajes de programación modernos es decir yo tengo dos clases clase a y clase b y de las dos clases yo hago a una instancia de la clase este eso se le llama herencia múltiple son los lenguajes como se más más permiten este tipo de herencia lenguajes como java lenguajes como richard que no permiten la herencia múltiple una clase abstracta pues es una clase o sea que solamente define qué es lo que deben de hacer las otras y no lo implementa y pues ya habíamos hablado del polimorfismo donde pues llamamos de la misma manera a la misma actividad sin importar el tipo de datos o el tipo de objetos ósea que necesitemos trabajar también algo importante y ustedes deben de saber es que como se comunica un objeto con otro pues igual que en la vida real a través de mensajes los mensajes son importantes o sea porque le dicen al objeto que hace esto que no hagas esto por ejemplo un paciente cuando va a hacer el doctor a interactuar con el objeto médico el doctor le da un mensaje le dice lo que tengo fiebre tengo dolor de cabeza etcétera etcétera entonces esa es la forma en cómo los objetos interactúan para poder dar solución a un problema en este caso solucionar el problema de un malestar o de una enfermedad también podemos tener una relación entre paciente y recepcionista y médico que también puede darse es decir el paciente debe probablemente anunciarse o reservar una cita y normalmente lo va a hacer con un recepcionista de la clínica en la cual vamos a estar de este modo pues damos por cerrada esta sesión de el enfoque orientado a objetos gracias [Música] bien [Música]