Sobrecàrrega de mètodes
La Sobrecàrrega de mètodes (en anglès function overloading) és quan es defineixen dos mètodes amb el mateix nom i a la mateixa classe però amb diferents implementacions. L'execució d'una crida a un mètode sobrecarregat dependrà aleshores del context de la crida.
Per exemple, ferTasca() i ferTasca(Objecte O) són mètodes sobrecarregats. Per cridar al primer no cal que li passem cap paràmetre, en canvi el segon necessita un paràmetre de tipus Objecte. Aleshores segons la crida que s'hagi fet s'executarà una implementació o una altra.
Cada llenguatge de programació té les seves peculiaritats per fer ús de la sobrecàrrega de mètodes,[1] per exemple en Java es pot tenir la funció o mètode sobrecarregat amb el mateix nombre de paràmetres però essent de tipus diferent,[2] ja que si fossin iguals, el compilador no sabria quin triar.[3] I en C++ es poden donar valors per defecte als paràmetres,[4] de manera que quan es crida a la funció, si s'omet el paràmetre, aquest obtindrà el valor per defecte assignat en la seva declaració.
Regles per la sobrecàrrega
[modifica]Bàsicament podem sobrecarregar mètodes a partir de dues regles generals, tot i que podem trobar altres regles segons el llenguatge que estiguem utilitzant.
- Tenir diferent nombre d'arguments
- Si hi ha el mateix nombre d'arguments que siguin de tipus diferents
- Que el mètode o funció retorni un tipus de dada o un altre és indiferent
Exemples
[modifica]public int suma(int a, int b)
public long suma(long a, long b)
public long suma(long a, long b, long c)
Sobrecàrrega de constructors
[modifica]La sobrecàrrega de constructors s'utilitza per crear o instanciar objectes de formes diferents. Per exemple tenim aquests tres constructors d'un objecte anomenat Persona en llenguatge java on podem crear una Persona a partir del seu nom i els dos cognoms, a partir del seu nom i només el seu primer cognom o bé la Persona sense cap dada.
public class Persona {
private String Nom, Cognom1, Cognom2;
//Constructor Persona amb Nom i 2 cognoms
public Persona(String n, String c1, String c2) {
Nom = n;
Cognom1 = c1;
Cognom2 = c2;
}
//Constructor Persona amb Nom i el primer cognom
public Persona(String n, String c1) {
Nom = n;
Cognom1 = c1;
Cognom2 = null;
}
//Constructor Persona sense cap dada
public Persona() {
Nom = null;
Cognom1 = null;
Cognom2 = null;
}
}
Referències
[modifica]Enllaços externs
[modifica]- Bertrand Meyer: Overloading vs Object Technology, in Journal of Object-Oriented Programming (JOOP), vol. 14, no. 4, October–November 2001.
- Java Documentation. Defining Methods. Overloading Methods.
- C++ operator overloading
- n3242.pdf – Last publicly available Committee Draft of "ISO/IEC IS 14882 – Programming Languages – C++" (28 February 2011)
- Database PL/SQL User's Guide and Reference. Overloading Subprogram Names.
Text is available under the CC BY-SA 4.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.