Método (programación de computadoras)


De Wikipedia, la enciclopedia libre
  (Redirigido desde métodos estáticos )
Saltar a navegación Saltar a búsqueda

Un método en programación orientada a objetos (OOP) es un procedimiento asociado con un mensaje y un objeto . Un objeto consta de datos y comportamiento ; estos comprenden una interfaz , que especifica cómo el objeto puede ser utilizado por cualquiera de sus diversos consumidores. [1]

Los datos se representan como propiedades del objeto y los comportamientos se representan como métodos. Por ejemplo, un Windowobjeto podría tener métodos como openy close, mientras que su estado (ya sea 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 determinada. Una de las capacidades más importantes que proporciona un método es la anulación del método : el mismo nombre (p. Ej., 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 la fórmula apropiada se invoca si el objeto receptor es un rectangle, circle, triangle, etc.

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

Anulación y sobrecarga

La invalidación y la sobrecarga de métodos son dos de las formas más importantes en las que un método se diferencia de un procedimiento convencional o una llamada a función. La anulación se refiere a una subclase que redefine la implementación de un método de su superclase. Por ejemplo, findAreapuede ser un método definido en una clase de forma, [3] triangle , etc. cada uno definiría la fórmula apropiada para calcular su área. La idea es mirar los objetos como "cajas negras" para que los cambios en las partes internas del objeto se puedan realizar con un impacto mínimo en los otros objetos que lo utilizan. Esto se conoce como encapsulación y está destinado a facilitar el mantenimiento y la reutilización del código.

La sobrecarga de métodos, por otro lado, se refiere a diferenciar el código utilizado para manejar un mensaje en función de los parámetros del método. Si uno ve el objeto receptor como el primer parámetro en cualquier método, la anulación es solo un caso especial de sobrecarga donde la selección se basa solo en el primer argumento. El siguiente ejemplo simple de Java ilustra la diferencia:

Métodos de acceso, mutador y administrador

Los métodos de acceso se utilizan para leer los valores de datos de un objeto. Los métodos mutadores se utilizan para modificar los datos de un objeto. Los métodos de administrador 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 base de datos fetch), sin necesidad de cambiar 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 yprogramación estructurada . [4]

Constructores

Un constructor es un método que se llama al comienzo de la vida útil de un objeto para crear e inicializar el objeto, un proceso llamado construcción (o instanciación ). La inicialización puede incluir una adquisición de recursos. Los constructores pueden tener parámetros, pero normalmente no devuelven valores en la mayoría de los lenguajes. Vea el siguiente ejemplo en Java:

public  class  Main  {  String  _name ;  int  _roll ; Main ( String  name ,  int  roll )  {  // método constructor  this . _name  =  nombre ;  esto . _roll  =  rodar ;  } }

Destructores

Un destructor es un método que se llama automáticamente al final de la vida de un objeto, un proceso llamado destrucción . La destrucción en la mayoría de los lenguajes no permite argumentos del método destructor ni devuelve valores. La destrucción se puede implementar para realizar tareas de limpieza y otras tareas en la destrucción de objetos.

Finalizadores

En los lenguajes de recolección de basura , como Java , C # y Python , los destructores se conocen como finalizadores . Tienen un propósito y una función similares a los de los destructores, pero debido a las diferencias entre los lenguajes que utilizan la 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 uno con solo una firma y sin cuerpo de implementación . A menudo se utiliza para especificar que una subclase debe proporcionar una implementación del método. Los métodos abstractos se utilizan para especificar interfaces en algunos lenguajes de programación. [5]

Ejemplo

El siguiente código Java muestra una clase abstracta que debe ampliarse:

 Forma de clase  abstracta { área int abstracta ( int h , int w ); // firma del método abstracto }        

La siguiente subclase amplía la clase principal:

 Rectángulo de clase  pública extiende Forma { @Override int area ( int h , int w ) { return h * w ; } }               

Restracción

Si una subclase proporciona una implementación para un método abstracto, otra subclase puede hacerlo abstracto nuevamente. A esto se le llama restracción .

En la práctica, esto rara vez se usa.

Ejemplo

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

clase  IA {  vacío virtual público  M () { } } clase abstracta IB : IA { anulación pública abstracta vacío M (); // permitido }              

Los métodos predeterminados de las interfaces también se pueden restraer, requiriendo subclases para implementarlos. (Esto también se aplica a Java).

interfaz  IA {  void  M ()  {  } } interfaz  IB  :  IA {  resumen  void  IA . M (); } clase  C  :  IB  {  }  // error: la clase 'C' no implementa 'IA.M'.

Métodos de clase

Los métodos de clase son métodos que se llaman en una clase en lugar de una instancia. Por lo general, se utilizan como parte de un metamodelo de objetos . Es decir, para cada clase definida se crea una instancia del objeto de clase en el metamodelo. Los protocolos de metamodelo permiten crear y eliminar clases. En este sentido, brindan la misma funcionalidad que los constructores y destructores descritos anteriormente. Pero en algunos lenguajes como Common Lisp Object System (CLOS), el metamodelo permite al desarrollador alterar dinámicamente el modelo de objetos en tiempo de ejecución: por ejemplo, para crear nuevas clases, redefinir la jerarquía de clases, modificar propiedades, etc.

Métodos especiales

Los métodos especiales son muy específicos del idioma y un idioma puede admitir ninguno, algunos o todos los métodos especiales definidos aquí. El compilador de un lenguaje puede generar automáticamente métodos especiales predeterminados o un programador puede tener la opción de definir métodos especiales. La mayoría de los métodos especiales no se pueden llamar directamente, sino que el compilador genera código para llamarlos en los momentos adecuados.

Métodos estáticos

Los métodos estáticos están destinados a ser relevantes para todas las instancias de una clase en lugar de para cualquier instancia específica. Son similares a las variables estáticas en ese sentido. Un ejemplo sería un método estático para sumar los valores de todas las variables de cada instancia de una clase. Por ejemplo, si hubiera una Productclase, podría tener un método estático para calcular el precio promedio de todos los productos.

En Java, un método estático de uso común es:

Math.max (doble a, doble b)

Este método estático no tiene ningún objeto propietario y no se ejecuta en una instancia. Recibe toda la información de sus argumentos. [3]

Se puede invocar un método estático incluso si aún no existen instancias de la clase. Los métodos estáticos se denominan "estáticos" porque se resuelven en tiempo de compilación según la clase a la que se llaman y no dinámicamente como en el caso de los métodos de instancia, que se resuelven polimórficamente según el tipo de tiempo de ejecución del objeto.

Operadores de asignación de copias

Los operadores de asignación de copia definen las acciones que debe realizar el compilador cuando se asigna un objeto de clase a un objeto de clase del mismo tipo.

Métodos de operador

Los métodos de operador definen o redefinen los símbolos de operador y definen las operaciones a realizar con el símbolo y los parámetros del método asociados. Ejemplo de C ++:

#include <cadena>  datos de clase {  publico : bool operator < ( const Data & data ) const { return roll_ < data . roll_ ; }           bool operador == ( const de datos y datos ) const {      devolver nombre_ == datos . name_ && roll_ == datos . roll_ ;        } privado : std :: string name_ ;  int roll_ ; };

Funciones miembro en C ++

Algunos lenguajes de procedimiento se ampliaron con capacidades orientadas a objetos para aprovechar los grandes conjuntos de habilidades y el código heredado para esos lenguajes, pero aún así proporcionan los beneficios del desarrollo orientado a objetos. Quizás el ejemplo más conocido sea C ++ , una extensión orientada a objetos del lenguaje de programación C. Debido a los requisitos de diseño para agregar el paradigma orientado a objetos a un lenguaje de procedimientos existente, el paso de mensajes en C ++ tiene algunas capacidades y terminologías únicas. Por ejemplo, en C ++ un método se conoce como función miembro . C ++ también tiene el concepto de funciones virtuales que son funciones miembro que se pueden anular en clases derivadas y permitirdespacho dinámico .

Funciones virtuales

Las funciones virtuales son los medios por los cuales una clase C ++ puede lograr un comportamiento polimórfico. Las funciones miembro no virtuales , o métodos regulares , son aquellos que no participan en el polimorfismo .

Ejemplo de C ++:

#include  <iostream>#include  <memoria>class  Super  {  public :  virtual  ~ Super ()  =  predeterminado ; virtual  void  IAm ()  {  std :: cout  <<  "¡Soy la superclase ! \ n " ;  } };class  Sub  :  public  Super  {  public :  void  IAm ()  override  {  std :: cout  <<  "¡Soy la subclase! \ n " ;  } };int  main ()  {  std :: unique_ptr < Super >  inst1  =  std :: make_unique < Super > ();  std :: unique_ptr < Super >  inst2  =  std :: make_unique < Sub > (); inst1 -> IAm ();  // Llamadas | Super :: IAm |.  inst2 -> IAm ();  // Llamadas | Sub :: IAm |. }

Ver también

  • Propiedad (programación)
  • Invocación de método remoto
  • Subrutina , también llamada subprograma, rutina, procedimiento o función

Notas

  1. ^ Los consumidores de un objeto pueden constar de varios tipos de elementos, como otros programas, sistemas informáticos remotos o programadores informáticos que deseen utilizar el objeto como parte de sus propios programas.
  2. ^ "¿Qué es un objeto?" . oracle.com . Oracle Corporation . Consultado el 13 de diciembre de 2013 .
  3. ↑ a b Martin, Robert C. (2009). Código limpio: un manual de artesanía de software ágil . Prentice Hall. pag. 296. ISBN 978-0-13-235088-4.
  4. ^ Meyer, Bertrand (1988). Construcción de software orientado a objetos . Cambridge: Prentice Hall International Series en Ciencias de la Computación. págs. 52–54. ISBN 0-13-629049-3.
  5. ^ "Métodos abstractos y clases" . oracle.com . Documentación de Oracle Java . Consultado el 11 de diciembre de 2014 .

Referencias

  • JANA, DEBASISH (1 de enero de 2005). C ++ Y PARADIGMA DE 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 . Aprendizaje Cengage. ISBN 0-7668-3894-3.
  • Balagurusamy (2013). Programación orientada a objetos con C ++ . Educación de Tata McGraw-Hill. ISBN 978-1-259-02993-6.
  • Kirch-Prinz, Ulla; Prinz, Peter (2002). Una guía completa para la programación en C ++ . Jones y Bartlett Learning. ISBN 978-0-7637-1817-6.
  • Conger, David (2006). Creación de juegos en C ++: una guía paso a paso . Nuevos jinetes. ISBN 978-0-7357-1434-2.
  • Skinner, MT (1992). El libro C ++ avanzado . Silicon Press. ISBN 978-0-929306-10-0.
  • Love (1 de septiembre de 2005). Desarrollo del kernel de Linux . Educación Pearson. ISBN 978-81-7758-910-8.
  • DEHURI, SATCHIDANANDA; JAGADEV, ALOK KUMAR; RATH, AMIYA KUMAR (8 de mayo de 2007). PROGRAMACIÓN ORIENTADA A OBJETOS UTILIZANDO C ++ . PHI Learning Pvt. Ltd. ISBN 978-81-203-3085-6.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Method_(computer_programming)&oldid=1037534710 "