Bruno R
Se trata de modelar un sistema como una coleccion de objetos, donde cada uno de los cuales representa un aspecto particular del sistema. Los objetos contienen funcionalidades y datos. Un objeto proporciona una interfaz publica a otro codigo que quiera usarlo, pero mantiene su propio estado interno privado. Esto significaria que otras partes del sistema no tienen que preocuparse por lo que sucede dentro del objeto.
Cuando se modela un problema en terminos de objeto, hacemos definicion abstractas que representan los tipos de objetos que queremos tener en nuestro sistema.
Una clase se podria considerar como una plantilla para la creacion de objetos, donde establecemos propiedades y metodos que seran replicados en los objetos instanciados. Ej:
Así Professorpodría ser una clase en nuestro sistema, y la definición de la clase enumera los datos y métodos que tiene cada profesor.
Entonces, en pseudocódigo, una clase Professor podría escribirse así:
class Professor properties name teaches methods grade(paper) introduceSelf()
Esta definiria una clase profesor con dos propiedades y dos metodos. Cada objeto creado a partir de esta clase se llama instancia de la clase Professor.
El proceso de creacion de una instancia lo realiza una funcion especial llamada constructor(). Se pasan los valores al constructor de cualquier estado que queramos inicializar dentro de la nueva instancia.
Por lo general el constructor() se escribe como parte de la definicion de clase y tiene el mismo nombre que la clase misma:
class Professor properties name teaches
constructor Professor(name, teaches)
//a grandes rasgos se podria ver como una forma de pasar los parametros que se utilizaran //dentro de los nuevos objetos, que antes pasabamos con la funcion creadora //en este caso estamos pasando dos parametros para inicializar name y teaches
methods grade(paper) introduceSelf()
Luego podemos crear a partir de esta nuevos objetos profesores, para iniciar un constructor por lo general los lenguajes de programacion utilizan la palabra clavenew.
walsh = new Professor('Walsh', 'Psychology') walsh.teaches // 'Psychology' walsh.introduceSelf() // 'My name is Professor Walsh, and I will be your Psychology professor'
Bien siguiendo con el ejercicio ahora faltarian los estudiantes, los cuales tendriamos que definir en una nueva clase:
class Student properties name year constructor Student(name, year) methods introduceSelf()
Aca se puede notar que algunas caracteristicas se repiten tanto en la clases profesor y estudiante, como son el nombre y el saludo. Para no repetir caracteristicas es que se hace uso de la herencia, en donde podriamos crear una primera clase donde se encuentren estos datos genericos para que sean heredados por las clases con un grado mas de especificidad (profesor, estudiante).
Nuestra primera clase podria ser Person, donde almacenariamos los datos como nombre y saludo, para luego derivar en clases especificas como Professor y Student.
class Person properties name constructor Person(name) methods introduceSelf() class Professor : extends Person properties teaches constructor Professor(name, teaches) methods grade(paper) introduceSelf() class Student : extends Person properties year constructor Student(name, year) methods introduceSelf()
En este caso se podria decir que Person es la superclase o clase padre de Professor y Student, y estas serian subclases o clases secundarias de Person.
El metodo introduceSelf() se repite en las tres clases, esto se debe a que el saludo siendo estudiante o profesor es diferente, y asi mismo para un objeto instanciado de Person tambien podria haber un saludo predefinido. A esta caracteristica, donde un metodo tiene el mismo nombre pero distintas implementaciones en diferentes clases se le conoce como polimorfismo. Cuando un metodo en una subclase remplaza la implementacion de la version en la superclase, decimos que la subclase anula la version en la superclase.
Los objetos proporcionan una interfaz para otro codigo del sistema que quiera usarlos, manteniendo su propio estado interno. El estado interno del objeto se mantiene aislado del sistema y la unica manera de acceder a el es mediante los metodos del objeto, y no desde otros objetos. Mantener privado el estado interno del objeto y en formas generales mantener una division entre el interfaz publica y su estado privado, se llama encapsulamiento.
class Student : extends Person properties private year constructor Student(name, year) methods introduceSelf() canStudyArchery() { return this.year > 1 } student = new Student('Weber', 1) student.year // error: 'year' is a private property of Student //Ejemplo del callout
En los lenguajes que no cuentan con estas imposiciones, es normal que los programadores utilicen convenciones de nomenclatura, como seria el comenzar el nombre con un guion bajo, para indiar que la propiedad debe considerarse como privada.
...
Glosario de palabras
Buscar conceptos