Articulo de referencia

Método (programación informática)

En la programación orientada a objetos (POO), un método es un procedimiento asociado a un objeto y, generalmente, también a un mensaje . Un objeto consta de datos de estado y co...

En la programación orientada a objetos (POO), un método es un procedimiento asociado a un objeto y, generalmente, también a un mensaje . Un objeto consta de datos de estado y comportamiento ; estos componen una interfaz , que especifica cómo se puede utilizar el objeto. Un método es un comportamiento de un objeto parametrizado por un usuario.

Los datos se representan como propiedades del objeto, y los comportamientos como métodos. Por ejemplo, un Windowobjeto podría tener métodos como openy close, mientras que su estado (si está abierto o cerrado en un momento dado) sería una propiedad.

En la programación basada en clases , los métodos se definen dentro de una clase , y los objetos son instancias de una clase dada. Una de las capacidades más importantes que proporciona un método es la sobreescritura de métodos : el mismo nombre (por ejemplo, area) se puede usar para varios tipos diferentes de clases. Esto permite que los objetos emisores invoquen comportamientos y deleguen la implementación de esos comportamientos al objeto receptor. Un método en la programación Java establece el comportamiento de un objeto de clase. Por ejemplo, un objeto puede enviar un areamensaje a otro objeto y se invoca la fórmula apropiada, ya sea que el objeto receptor sea un Rectangle, Circle, Triangle, etc.

Los métodos también proporcionan la interfaz que otras clases utilizan para acceder y modificar las propiedades de un objeto; esto se conoce como encapsulación . La encapsulación y la sobreescritura son las dos características distintivas principales entre los métodos y las llamadas a procedimientos. [ 1 ]

Anulación y sobrecarga

La sobreescritura y la sobrecarga de métodos son dos de las diferencias más significativas entre un método y un procedimiento o llamada a función convencional. La sobreescritura se refiere a la redefinición de la implementación de un método de su superclase por parte de una subclase. Por ejemplo, findAreaun método definido en una clase de forma, [ 2 ]Triangle , etc., definiría cada uno la fórmula apropiada para calcular su área. La idea es considerar los objetos como "cajas negras" para que los cambios en su funcionamiento interno tengan un impacto mínimo en los demás objetos que los utilizan. Esto se conoce como encapsulación y tiene como objetivo facilitar el mantenimiento y la reutilización del código.

Por otro lado, la sobrecarga de métodos se refiere a diferenciar el código utilizado para procesar un mensaje según los parámetros del método. Si se considera el objeto receptor como el primer parámetro de cualquier método, entonces la sobreescritura es simplemente un caso especial de sobrecarga, donde la selección se basa únicamente en el primer argumento.

Métodos de acceso, mutación y gestión

Los métodos de acceso se utilizan para leer los valores de datos de un objeto. Los métodos de modificación se utilizan para modificar los datos de un objeto. Los métodos de gestión se utilizan para inicializar y destruir objetos de una clase, por ejemplo, constructores y destructores.

Estos métodos proporcionan una capa de abstracción que facilita la encapsulación y la modularidad . Por ejemplo, si una clase de cuenta bancaria proporciona un getBalance()método de acceso para recuperar el saldo actual (en lugar de acceder directamente a los campos de datos del saldo), las revisiones posteriores del mismo código pueden implementar un mecanismo más complejo para la recuperación del saldo (por ejemplo, una consulta a la base de datos ), sin necesidad de modificar el código dependiente. Los conceptos de encapsulación y modularidad no son exclusivos de la programación orientada a objetos. De hecho, en muchos sentidos, el enfoque orientado a objetos es simplemente la extensión lógica de paradigmas anteriores como los tipos de datos abstractos y la programación estructurada . [ 3 ]

Constructores

Un constructor es un método que se llama al inicio del ciclo de vida de un objeto para crearlo e inicializarlo, un proceso denominado construcción (o instanciación ). La inicialización puede incluir la adquisición de recursos. Los constructores pueden tener parámetros, pero generalmente no devuelven valores en la mayoría de los lenguajes. Vea el siguiente ejemplo en Java:

clase pública Persona { cadena privada nombre ; entero privado edad ;// método constructor public Person ( String name , int age ) { this . name = name ; this . age = age ; } }

Incinerador de basuras

Un destructor es un método que se llama automáticamente al final del ciclo de vida de un objeto, un proceso llamado destrucción . En la mayoría de los lenguajes de programación, la destrucción no permite argumentos ni valores de retorno para los métodos destructores. Los destructores pueden implementarse para realizar tareas de limpieza y otras funciones al destruir un objeto.

Finalizadores

En lenguajes con recolección de basura , como Java , [ 4 ] : ​​26, 29 C# , [ 5 ] : 208–209 y Python , los destructores se conocen como finalizadores . Tienen un propósito y función similares a los destructores, pero debido a las diferencias entre los lenguajes que utilizan recolección de basura y los lenguajes con administración manual de memoria , la secuencia en la que se llaman es diferente.

Métodos abstractos

Un método abstracto es aquel que solo tiene una firma y no un cuerpo de implementación . Se usa frecuentemente para especificar que una subclase debe proporcionar una implementación del método, como en una clase abstracta . Los métodos abstractos se utilizan para especificar interfaces en algunos lenguajes de programación. [ 6 ]

Ejemplo

El siguiente código Java muestra una clase abstracta que necesita ser extendida:

clase abstracta Shape { // firma del método abstracto abstract int area ( int height , int width ); }

La siguiente subclase extiende la clase principal:

public class Rectangle extends Shape { @Override int area ( int height , int width ) { return height * width ; } }

Reabstracción

Si una subclase proporciona una implementación para un método abstracto, otra subclase puede volver a hacerlo abstracto. Esto se denomina reabstracción .

En la práctica, esto se usa raramente.

Ejemplo

En C#, un método virtual puede ser sobrescrito por un método abstracto. (Esto también se aplica a Java, donde todos los métodos no privados son virtuales).

clase IA { público virtual void M () { // ... } }clase abstracta IB : IA { // permitido público sobrescribir abstracto void M (); }

Los métodos predeterminados de las interfaces también pueden ser reabstraídos, lo que obliga a las subclases a implementarlos. (Esto también se aplica a Java).

interfaz IA { void M () { // ... } }interfaceIB:IA{abstractvoidIA.M();}// error: class 'C' does not implement 'IA.M'.classC:IB{// ...}

Class methods

Class methods are methods that are called on a class rather than an instance. They are typically used as part of an object meta-model. I.e, for each class, defined an instance of the class object in the meta-model is created. Meta-model protocols allow classes to be created and deleted. In this sense, they provide the same functionality as constructors and destructors described above. But in some languages such as the Common Lisp Object System (CLOS) the meta-model allows the developer to dynamically alter the object model at run time: e.g., to create new classes, redefine the class hierarchy, modify properties, etc.

Special methods

Special methods are very language-specific and a language may support none, some, or all of the special methods defined here. A language's compiler may automatically generate default special methods or a programmer may be allowed to optionally define special methods. Most special methods cannot be directly called, but rather the compiler generates code to call them at appropriate times.

Static methods

Static methods are meant to be relevant to all the instances of a class rather than to any specific instance. They are similar to static variables in that sense. An example would be a static method to sum the values of all the variables of every instance of a class. For example, if there were a Product class it might have a static method to compute the average price of all products.

A static method can be invoked even if no instances of the class exist yet. Static methods are called "static" because they are resolved at compile time based on the class they are called on and not dynamically as in the case with instance methods, which are resolved polymorphically based on the runtime type of the object.

Examples

In Java

In Java, a commonly used static method is Math.max().

// called like:Math.max(a,b);// declared like:publicclassMath{// ...publicstaticdoublemax(doublea,doubleb){return(a<b)?b:a;}}

This static method has no owning object and does not run on an instance. It receives all information from its arguments.[2]

Copy-assignment operators

Copy-assignment operators define actions to be performed by the compiler when a class object is assigned to a class object of the same type.

Operator methods

Operator methods define or redefine operator symbols and define the operations to be performed with the symbol and the associated method parameters. C++ example:

importstd;usingstd::string;classPerson{private:stringname;intage;public:booloperator<(constPerson&other)const{returnage<other.age;}booloperator==(constPerson&other)const{returnname==other.name&&age==other.age;}};

Member functions in C++

Some procedural languages were extended with object-oriented capabilities to leverage the large skill sets and legacy code for those languages but still provide the benefits of object-oriented development. Perhaps the most well-known example is C++, an object-oriented extension of the C programming language. Due to the design requirements to add the object-oriented paradigm on to an existing procedural language, message passing in C++ has some unique capabilities and terminologies. For example, in C++ a method is known as a member function. C++ also has the concept of virtual functions which are member functions that can be overridden in derived classes and allow for dynamic dispatch.

Virtual functions

Las funciones virtuales son el medio por el cual una clase de C++ puede lograr un comportamiento polimórfico. Las funciones miembro no virtuales , o métodos regulares , son aquellas que no participan en el polimorfismo .

Ejemplo en C++:

importar std ;usando std :: unique_ptr ;clase Base { public : virtual ~ Base () = default ;virtual void getMessage () { std :: println ( "¡Soy la superclase!" ); } };clase Derivada : pública Base { pública : void getMessage () override { std :: println ( "¡Soy la subclase!"); } };int main () { unique_ptr < Base > base = std :: make_unique < Base > (); unique_ptr < Base > derived = std :: make_unique < Derived > ();base -> getMessage (); // Llama a Base::getMessage(). derived -> getMessage (); // Llama a Derived::getMessage(). }

Véase también

Notas

  1. "¿Qué es un objeto?" . oracle.com . Oracle Corporation . Consultado el 13 de diciembre de 2013 .
  2. 1 2 Martin, Robert C. (2009). Clean Code: A Handbook of Agile Software Craftsmanship . Prentice Hall. p. 296. ISBN  978-0-13-235088-4.
  3. Meyer, Bertrand (1988). Construcción de software orientado a objetos . Cambridge: Prentice Hall International Series in Computer Science. pp. 52–54 . ISBN  0-13-629049-3.
  4. Bloch, Joshua (2018). "Effective Java: Programming Language Guide" (tercera ed.). Addison-Wesley. ISBN  978-0134685991.
  5. ^ Albahari, José. C# 10 en pocas palabras . O'Reilly. ISBN 978-1-098-12195-2.
  6. "Métodos y clases abstractas" . oracle.com . Documentación de Oracle Java . Consultado el 11 de diciembre de 2014 .

Referencias

  • JANA, DEBASISH (1 de enero de 2005). C++ y el paradigma de la programación orientada a objetos . PHI Learning Pvt. Ltd. ISBN 978-81-203-2871-6.
  • Sengupta, Probal (1 de agosto de 2004). Programación orientada a objetos: fundamentos y aplicaciones . PHI Learning Pvt. Ltd. ISBN 978-81-203-1258-6.
  • Svenk, Goran (2003). Programación orientada a objetos: Uso de C++ para ingeniería y tecnología . Cengage Learning. ISBN 0-7668-3894-3.
  • Balagurusamy (2013). Programación orientada a objetos con C++ . Tata McGraw-Hill Education. ISBN 978-1-259-02993-6.
  • Kirch-Prinz, Ulla; Prinz, Peter (2002). Guía completa de programación en C++ . Jones & Bartlett Learning. ISBN 978-0-7637-1817-6.
  • Conger, David (2006). Creación de juegos en C++: una guía paso a paso . New Riders. ISBN 978-0-7357-1434-2.
  • Skinner, MT (1992). El libro avanzado de C++ . Silicon Press. ISBN 978-0-929306-10-0.
  • Amor (1 de septiembre de 2005). Desarrollo del núcleo Linux . Pearson Education. ISBN 978-81-7758-910-8.
  • DEHURI, SATCHIDANANDA; JAGADEV, ALOK KUMAR; RATH, AMIYA KUMAR (8 de mayo de 2007). PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++ . PHI Aprendizaje Pvt. Limitado. ISBN limitado 978-81-203-3085-6.