Este supraîncărcarea metodelor prin polimorfismul de suprapunere în stivă în limba rusă

Și da, și nu. Depinde de ce înseamnă polimorfismul.

În general, polimorfismul este capacitatea de a trata în același mod cu entități de diferite tipuri. Sau, mai puțin științific, existența unei interfețe comune (în mod izolat față de C #) pentru entități de diferite tipuri. Acesta este un concept foarte general, care poate fi foarte mult să se întindă. Ce se va întâmpla și ce abstracțiuni lingvistice vor fi implicate în acest lucru nu este atât de important.







La acest polimorfism, supraîncărcarea metodei se referă în modul cel mai direct: este un polimorfism ad-hoc pentru o funcție: poate transfera diferite tipuri (în limitele suprasarcinilor implementate) și va fi executat un alt cod. (Metodele unui obiect de clasă pot fi tratate ca o funcție cu un argument implicit suplimentar: obiectul a cărui metodă este denumită [this in sharpe].)

O întrebare legitimă poate apărea: sunt diferitele supraîncărcări, apoi diferite funcții, este respectarea definiției polimorfismului rupt? Răspuns: Polimorfismul există la nivelul limbii. și dacă într-o limbă de suprasarcină cu aceleași nume, dar diferite tipuri, sunt considerate aceeași funcție, atunci definiția este îndeplinită și totul este bine.

Nivelele de mai jos, desigur, cod diferit sunt plasate în locuri diferite, iar implementarea ar trebui să fie trimisă în diferite locuri, manipulând tehnic valorile transferate în moduri diferite. Dar nu lucrați direct cu aceste niveluri, polimorfismul este acolo dacă este (ceea ce este puțin probabil), atunci nu exact (sau deloc?) Cel pe care îl utilizați.

În PLO, polimorfismul înseamnă de obicei un concept mult mai restrâns: abilitatea de a apela aceeași metodă pentru orice obiect al unei clase / interfețe date sau orice subclasă / implementare a acesteia.

La acest polimorfism, supraîncărcarea este cu adevărat irelevantă.

(* Ad hoc, lat, situațional, pentru acest caz)

În mod tradițional, în "polimorfismul" comunității OOP este obișnuit să se numească doar un tip de polimorfism asociat subtipurilor. În acest caz, în comunitatea PT "polimorfismul" se numește polimorfism parametric. Wikipedia oferă trei tipuri de polimorfism în CS - ad hoc, parametric și subtipuri. Cu toate acestea, alte surse pot oferi o diviziune diferită.

Termenii polimorfism "static" și "dinamic" se aplică numai unei implementări specifice a unei limbi specifice, în special într-o limbă cu tastare dinamică, o suprasarcină de funcții poate fi implementată în timp ce programul se execută.

răspunsul este 23 noiembrie '16 la ora 13:48

@DenisBubnov C # suportă atât FP cât și OOP și alte paradigme. - Abyx pe 23 noiembrie '16 la 14:18

@DenisBubnov, dar mi se pare că este corect. La urma urmei, conceptul de polimorfism există atât în ​​multe limbi, cât și în programare, în special. În toate limbile și paradigmele, polimorfismul diferit și, prin urmare, atunci când vorbesc doi programatori din aceeași limbă, dar paradigme diferite, atunci nu poate exista înțelegere. Și ce putem spune despre disputa dintre programatori din diferite limbi. Prin urmare, știind tot ceea ce sa spus va beneficia și vă va ajuta să înțelegeți mai profund problema. - OlmerDale pe 23 noiembrie '16 la 14:34







Conceptul de polimorfism nu are o definiție clară, dar pentru o abordare orientată spre spațiu se presupune de obicei că există două tipuri de polimorfism:

Dinamic (folosind metode virtuale și redefinirea acestora în clasele descendente) - în acest caz, versiunea codului apelat este determinată de CLR la timpul de execuție, trecând de-a lungul lanțului de suprascriere din clasele descendente.

Static (utilizarea generalizărilor (generice)) - în acest caz este utilizată o singură versiune a codului pentru obiecte de diferite tipuri.

Metodele de supraîncărcare bazate pe terminologia de mai sus nu reprezintă un polimorfism; Codul specific și tipul obiectului sunt cunoscute în stadiul COMPILATION. Cu alte cuvinte, în acest caz, avem pur și simplu metode DIFERITE cu același nume, care diferă în funcție de tipurile sau de numărul de parametri parcurși.

Cu același rezultat, am putea adăuga la denumirea metodei tipurile de parametri, iar din punctul de vedere al arhitecturii aplicației, nimic nu se va schimba, iar polimorfismul este, în primul rând, o abordare arhitecturală a rezolvării problemelor.

Polimorfismul poate fi diferit. În special, statice și dinamice.

Polimorfismul static este atunci când supraîncărcarea mai multor funcții este determinată pe baza tipurilor listei de argumente.

Deci aici e vorba de terminologie. Probabil colegii tăi sub polimorfism înseamnă exclusiv dinamici.

În C #, puteți partaja același nume cu două sau mai multe metode din aceeași clasă, cu condiția ca parametrii săi să fie declarați diferit. În acest caz, ei spun că metodele sunt supraîncărcate, iar procesul în sine se numește metode de supraîncărcare.

Luați în considerare această metodă simplă:

Și scrieți metodele care îl supraîncărcați:

Am supraîncărcat metoda OverloadMethod de două ori.

Ce putem vedea în timpul apelului metodei:

Supraîncărcarea metodelor susține proprietatea polimorfismului, deoarece în acest fel în C # principiul principal al polimorfismului este realizat: o interfață - multe metode.

În C #, fiecărei metode i se poate atribui același nume. Compilatorul C # determină ce versiune a metodei OverloadMethod ar trebui să fie apelată, pe baza tipului de argument transmis, la momentul apelării metodei.

În C #, conceptul de semnătură este definit, denotând numele metodei și o listă a parametrilor acesteia; În ceea ce privește supraîncărcarea, acest concept înseamnă că într-o clasă nu ar trebui să existe două metode cu aceeași semnătură. Trebuie subliniat că semnătura nu include tipul valorii returnate, deoarece nu este luată în considerare atunci când compilatorul C # ia o decizie cu privire la supraîncărcarea metodei. Modificatorul de paramuri nu este, de asemenea, inclus în semnătura.

Dacă C # nu suportă supraîncărcarea, atunci ar trebui să dați fiecărei metode numele, care nu este foarte convenabil. În acest caz, metoda OverloadMethod implementează mai multe supraîncărcări.

Polimorfismul este principiul programării orientate obiect după încapsulare și moștenire. Această proprietate, care permite utilizarea aceluiași nume pentru a rezolva două sau mai multe sarcini similare, dar diferite din punct de vedere tehnic. Scopul polimorfismului, în ceea ce privește programarea orientată pe obiecte, este acela de a folosi același nume pentru a specifica acțiunile comune clasei.

Înțelegerea polimorfismului este adesea interpretată diferit, puteți vedea o mulțime de concepte, dar totul se reduce la un singur lucru. Ca rezultat, răspunsul la întrebarea: Este polimorfismul metodelor de supraîncărcare? - Răspund DA.







Articole similare

Trimiteți-le prietenilor: