Metoda (programare)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

O metodă (sau chiar funcție de membru ), în informatică , este un termen care este utilizat în principal în contextul programării orientate pe obiecte pentru a indica un subprogram asociat exclusiv unei clase și care (în general) reprezintă o operație care poate fi efectuată pe obiecte și instanțe ale acelei clase.

Caracteristici

Ca și într-o procedură a unui limbaj de programare procedurală , o metodă constă de obicei din:

  • o semnătură (semnătură) sau definiția / declarația cu tipul returnat al metodei, numele metodei , tipul și numele oricăror parametri trecuți în intrare (astfel de parametri formali); prin urmare, în general, definiția unei metode utilizează aceeași sintaxă utilizată pentru proceduri (în limbajele orientate obiect care le susțin), cu niște indicatori suplimentari care permit obținerea încapsulării informațiilor.
  • corpul metodei, delimitat în mod adecvat de la început și sfârșit, cu una sau mai multe secvențe sau blocuri de instrucțiuni scrise în interior pentru a efectua o acțiune specifică posibil prin structuri de control al fluxului de execuție , cum ar fi selecții / control și iterație / cicluri și pe baza parametrii trecuți în intrare , capabili să returneze la programul apelant o valoare de retur (sau de ieșire ) de același tip cu cea declarată în semnătura inițială. De asemenea, în limbile care au un mecanism de gestionare a excepțiilor , blocarea metodelor se poate încheia prin creșterea unei excepții în cazul unei situații anormale care împiedică finalizarea corectă a operațiunilor sale.

Una dintre operațiile care pot fi efectuate printr-o metodă este citirea / scrierea datelor „private” stocate într-un obiect sau într-o clasă: în acest fel programatorul poate gestiona flexibil accesul la date, oferind, acolo unde este necesar, o protecție adecvată și mecanisme de validare.

Diferențele dintre conceptul general al unui subprogram și cel al unei metode derivă din faptul că metoda este interpretată ca o operație efectuată de un obiect. Pentru a face referire la invocarea unei metode, se folosesc uneori fraze care fac această legătură mai explicită; vorbim de exemplu de a da o comandă unui obiect sau chiar de a trimite un mesaj unui obiect . [1]

Multe limbi acceptă, de asemenea, tehnici de suprasarcină și / sau suprascriere .

Exemplu

Un exemplu generic în Java este următorul:

 // semnătura sau declarația metodei
 public return_type <method_name> (parametru_tip1 param1, ..., parametru_tipN paramN) {
// urmărește corpul metodei
          ... 
    bloc_instrucțiune ;
          ...
     if (condiție logică) {
          ...
       bloc_instrucțiune ;
          ...
       } 
      altfel dacă {
           ...
       bloc_instrucțiune ;
           ...
       }
      altceva {
           ...
       bloc_instrucțiune ;
           ...
       }
           ...
       bloc_instrucțiune ;
            ...
     for (int i = 0; i <10; i ++) {
           ...
      bloc_instrucțiune ;
           ...
      }
           ...
    bloc_instrucțiune ;
           ...
 returnează <object_type_method>;
 }

Sintaxă

Din punct de vedere sintactic , un formalism foarte obișnuit pentru a exprima această relație între obiect și metodă se numește notație punct , din numele englezesc punct al punctului . De exemplu,

cdplayer.play()

reprezintă apelul metodei de play pe obiectul cdplayer .

Referirea la un obiect în invocarea unei metode servește, de asemenea, pentru a indica contextul operațional al activării metodei; aceasta are de fapt posibilitatea de a accesa toate datele interne ale obiectului asupra căruia a fost invocat. În momentul apelului sau al invocației, valorile parametrilor care urmează să fie trecuți ( parametrii actuali ) trebuie să fie transmise, dacă este solicitat de metodă.

Tipuri

Metode statice

Cea mai obișnuită categorie de metode este cea a metodelor care, așa cum am menționat mai sus, sunt invocate cu referire la un obiect; acestea pot fi numite și metode de instanță . Metodele de clasă - numite și metode statice - reprezintă în schimb operații care nu trebuie să fie referite la obiecte individuale, ci la clasă în ansamblu. Pentru a apela sau invoca o metodă statică, scrieți doar numele metodei urmat de specificarea parametrilor curenți .

Exemplu

Exemplu generic în Java:

 public static return_type <method_name> (parametru_tip1 param1, ..., parametru_tipN paramN) {
           ... 
      bloc_instrucțiune ;
           ...
  returnează <object_type_method>;
 }

Constructori

Pictogramă lupă mgx2.svg Același subiect în detaliu: Constructor (informatică) .

O categorie particulară de metode o constituie constructorii , [2] care sunt invocați implicit de fiecare dată când este creat un obiect și care au scopul general de a inițializa datele sale interne. În multe limbi, inclusiv de exemplu Java , C ++ , C # și PHP (până la versiunea 4), constructorii se disting cu ușurință deoarece numele lor trebuie să coincidă cu cel al clasei de care aparțin.

Exemplu

Exemplu generic în Java:

 '' ' public ' '' < class_name > ( parametru_tip1 param1 , ..., parametru_tipN paramN )
{
    atribut1 = param1 ;
    ...
    attributeN = paramN;
}

Metode abstracte

În programarea orientată pe obiecte, clasele abstracte sunt clase care reprezintă concepte prea generale (și deci abstracte) pentru a avea instanțe directe. Într-o astfel de clasă se poate întâmpla ca, în mod similar, o metodă să fie o operație prea abstractă pentru a avea o implementare. O metodă abstractă este o metodă fără implementare (definită într-o clasă abstractă) care reprezintă o operație generală.

Un exemplu ar fi o metodă ipotetică de area() din clasa Poligono . Deși se poate spune că aria fiecărui poligon poate fi calculată, este posibil să nu fie ușor să scrieți instrucțiunile care efectuează efectiv acest calcul în termeni atât de generali. Pe de altă parte, acest calcul poate fi ușor introdus în implementările subclaselor specifice de Poligono , cum ar fi Rettangolo . Prin declararea metodei area din clasa Poligono ca metodă abstractă, indicați că toate poligoanele (toate subclasele Poligono ) trebuie să aibă acea operație și, în același timp , nu o furnizați (implementată) în corpul clasei. Consecința este că fiecare subclasă va trebui să furnizeze în mod necesar propria sa implementare a metodei prin suprasolicitare . [3]

Metode de acces

O metodă de acces (accessor method în engleză ) este un tip de metodă, de obicei foarte simplă și constă din câteva linii de cod, care permite accesul (citire sau scriere) la un atribut al obiectului. Utilizarea metodelor de acces este preferabilă accesului direct la datele de stare, deoarece este compatibil cu principiul ascunderii informațiilor . Practica metodelor de scriere pentru citirea și scrierea atributelor este atât de răspândită încât în ​​literatură există nume specifice pentru acest tip de metode: setter (pentru o metodă care scrie un atribut) și getter (pentru o metodă care este utilizată pentru a citi valoarea a unui atribut). Multe IDE - uri (de exemplu NetBeans și Eclipse ) oferă Refactoring instrumente care permit generarea automată a getters și setteri de atribute obiect.

Metode de extindere

O metodă de extensie (extension method în engleză ) este un tip de metodă care, odată afirmată, este adăugată automat la o clasă sau la un tip după finalizarea acesteia. Nu există nicio diferență sintactică între apelarea unei metode de extensie și apelarea unei metode declarate în definiția tipului . [4] Metode de extensie există în multe limbaje de programare ; în C # , de exemplu, acestea sunt implementate ca metode statice în cadrul claselor statice, iar primul argument al semnăturii lor este tastat în clasa extinsă și este precedat de cuvântul cheiethis ”. Avantajul metodelor de extensie este capacitatea de a evita crearea de ajutoare diverse, de obicei sub formă de clase statice cu metode statice, care ar fi o alternativă mai proastă din punct de vedere al lizibilității codului . Mai mult, metodele de extensie sunt integrate automat în mediul de dezvoltare Intellisense al Visual Studio , îmbunătățind astfel și întreținerea codului în sine. Motivul principal pentru care au fost introduse metodele de extensie este reprezentat de LINQ , o componentă a .NET Framework pentru Microsoft din 2007.

Exemplu în C # al unei clase cu două metode de extensie a clasei String : prima își inversează conținutul, iar a doua scrie cu majusculă prima literă:

 public static class StringExtensions
{
    șir public static invers ( această intrare șir )
    {
        if ( șir . IsNullOrEmpty ( intrare ))
        {
            restituie șirul . Gol ;
        }
        char [] chars = input . ToCharArray ();
        Matrice . Reverse ( caractere );
        returnează un nou șir ( caractere );
    }
    
    șir public static FirstCharToUpper ( această intrare de șir )
    {
        if ( șir . IsNullOrEmpty ( intrare ))
        {
            restituie șirul . Gol ;
        }
        întoarce char . ToUpper ( intrare [ 0 ]) + intrare . Substring ( 1 );
    }
}

Notă

  1. ^ Metafora apelului metodei ca un mesaj de derivă istoric din terminologia Smalltalk , unul dintre primele limbaje de programare orientate-obiect , și este încă foarte răspândită (în anumite contexte, de exemplu, este de asemenea folosit în terminologia Limbaj de modelare UML ).
  2. ^ În terminologia tehnică a diferitelor limbi, constructorii sunt uneori clasificați ca metode, alteori nu.
  3. ^ Mai corect, o subclasă ar putea să nu furnizeze implementarea area , dar atunci metoda ar rămâne abstractă și în subclasă. Deoarece metodele abstracte sunt permise numai în clasele abstracte, subclasa ar trebui, prin urmare, să fie și abstractă. Această schemă poate fi de fapt utilizată pentru a reprezenta ierarhii ale conceptelor abstracte.
  4. ^ Extension Methods (C # Programming Guide) , la docs.microsoft.com , 20 iulie 2015. Accesat la 18 decembrie 2018 .

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT