Adatbázisrendszerek. adatbázisokban. Objektumorientált és objektum-relációs adatbázisok április 24.

Hasonló dokumentumok
10. előadás. Alapfogalmak. Adatbázisrendszerek előadás november 28.

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Interfészek. PPT 2007/2008 tavasz.

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Bevezetés: az SQL-be

Már megismert fogalmak áttekintése

Objektum relációs lehetőségek az Oracle-ben. Katona Endre Adatbázis alapú rendszerek diasorozata alapján

OOP. Alapelvek Elek Tibor

GEIAL Kovács László. GEIAL Kovács László

Objektum orientált programozás Bevezetés

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

Adatbázis-kezelő rendszerek. dr. Siki Zoltán

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Adatbázis rendszerek. dr. Siki Zoltán

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

11. előadás Objektumorientált adatbázisok haladóbb ismeretek

Programozási nyelvek Java

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Adatbázisok* tulajdonságai

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Informatikai alapismeretek Földtudományi BSC számára

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Java programozási nyelv 5. rész Osztályok III.

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Objektum-relációs adatbázisok. Felhasználói típusok (User-Defined Types) Objektum ID-k Beágyazott táblák (Nested Tables)

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

JAVA PROGRAMOZÁS 2.ELŐADÁS

Objektumorientált programozás C# nyelven

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

OOP #1 (Bevezetés) v :39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

S0-02 Típusmodellek (Programozás elmélet)

Objektumelvű programozás

Bevezetés a C++ programozási nyelvbe

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Programozás. Adatbázis-kezelés (alapok) Fodor Attila

Adatbázisok - 1. előadás

Objektumorientált adatbázisok

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Programozási alapismeretek 4.

Programozás módszertan p.1/46

Java programozási nyelv 4. rész Osztályok II.

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

OOP #14 (referencia-elv)

Osztályok. 4. gyakorlat

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Adatbázis rendszerek SQL nyomkövetés

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Bevezetés: Relációs adatmodell

Programozási nyelvek Java

Oracle Spatial. Térbeli adatot tartalmazó tábla: Geometry table Legalább 2 oszlopa van: Elsődleges kulcs, SDO_GEOMETRY típusú oszlop.

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Virtuális függvények (late binding)

Java és web programozás

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

5. Gyakorlat. 5.1 Hálós adatbázis modell műveleti része. NDQL, hálós lekérdező nyelv:

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Programozás. Objektum Orientált Programozás (OOP) Alapfogalmak. Fodor Attila

Adatszerkezetek 2. Dr. Iványi Péter

Magas szintű adatmodellek Egyed/kapcsolat modell I.

B I T M A N B I v: T M A N

Osztály és objektum fogalma

Adatbázis, adatbázis-kezelő

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

SQL DDL-1: táblák és megszorítások

Adatbázis kezelés Delphiben. SQL lekérdezések

Bevezetés a Programozásba II 5. előadás. Objektumorientált programozás és tervezés

Adatmodellezés. 1. Fogalmi modell

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

Bevezetés a Python programozási nyelvbe

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Felhasználó által definiált adattípus

Interfészek. Programozás II. előadás. Szénási Sándor.

Objektumorientált programozás C# nyelven

C++ programozási nyelv Konstruktorok-destruktorok

Programozás III. - NGB_IN001_3

modell, amiben csak bináris sok-egy kapcsolatok (link, memberowner,

Adatmodellezés, alapfogalmak. Vassányi István

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Web-technológia PHP-vel

Perzisztencia. ANTAL Margit. Sapientia - EMTE. ANTAL Margit Java technológiák 11. előadás Perzisztencia

Osztálytervezés és implementációs ajánlások

Algoritmizálás és adatmodellezés tanítása 1. előadás

Osztálytervezés és implementációs ajánlások

Java és web programozás

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

Átírás:

Adatbázisrendszerek Objektum-orientáltság Objektumorientált és objektum-relációs 2018. április 24.

Előadás vázlata 2 Objektumorientált Az ODMG (Object Database Management Group) szerepe Az SQL objektumorientált kiterjesztései: objektum-relációs

3 Hagyományos adatmodellek melyek sikeresek voltak a tradicionális alkalmazásoknál: Hierarchikus Hálózati (a 60 s évek közepe óta) Relációs (1970 óta illetve 1982 óta) Objektumorientált () adatmodellek 90 s évek közepétől. Az objektumorientált létrehozásának okai: Növekvő igény a komplex adatbázis alkalmazások iránt, pl. CAD/CAM, CIM, tudományos, telekom, GIS, multimédia Komplexebb struktúrájú objektumok: összetett tranzakciók, új adattípusok (képek, filmek, nagy szöveges állományok), nem-standard alkalmazás-generált műveletek Igény arra, hogy kezelni tudjunk tetszőleges adattípust a hagyományos lekérdező nyelvek megtartásával programozási nyelvek elterjedése melyekkel a hagyományos adatbázis rendszerek nehézkesen működtek

Objektum-orientált () adatbázis rendszerek 4 Fő jellemző és előny: a tervező specifikálni tudja mind a sokszorosan összetett objektumok szerkezetét, mind az ezeken az objektumokon alkalmazható műveleteket. Object Databases (O(O)DB): Objektum-orientált Object Database Management Systems (OD(B)MS): Objektum-orientált adatbázis-kezelő rendszerek Objektum-relációs rendszerek (ORDBMS): a tradicionális RDBMS-ek szemlélettel való bővítései (Oracle), SQL 2008 szabvány (először mint SQL/Object majd az SQL/Foundation része) Szabványosítás az ODMG (Object Database Management Group) konzorcium keretében: ODMG 3.0 szabvány Tisztán rendszerek. Prototípusok: ORION, OpenDB, IRIS (HP), ODE. Üzleti rendszerek: GEMSTONE/S Object server, ONTOS DB, Objectivity/DB, Versant Object Database, ObjectStore, Ardent

fogalmak áttekintése 5 Objektum-orientált () szó eredete az programozási nyelvekre vezethető vissza Objektum azonosító (OID) fogalma Az osztály fogalmának bevezetése, egy objektum belső adatstruktúrájának leírása egy osztály deklarációban Absztrakt adattípus (absztrakt adatobjektum) fogalmának bevezetése: objektum szerkezete és típus konstruktorok A műveletek egységbezárása (encapsulation), a belső adatstruktúra elrejtése, az alkalmazható külső műveletek, metódusok meghatározása Perzisztencia (állandóság) és tranziencia (ideiglenesség) Típus vagy osztály hierarchia és öröklődés Hibrid programozási nyelvek: C++

Objektum 6 Két komponense van: állapot (tulajdonság, érték) és viselkedés (művelet),,hasonló a program változójához kivéve, hogy összetett adatstruktúra is lehet és a programozó speciális műveleteket definiálhat rajta. Az objektumok az programozási nyelvekben tranziensek (átmenetiek), a futás befejeztével törlődnek. Az objektumok az O(R)DMS-ekben perzisztensek (állandóak), eltárolódnak, később kinyerhetőek és megoszthatóak más programokkal. Egy O(R)DMS általában több programnyelvhez kapcsolódik állandó és osztott objektumokat szolgáltatva számukra.

Objektumok jellemzői 7 Direkt kapcsolat a valós világ és az adatbázis objektumai között az állandó (megváltozhatatlan) objektum azonosító (OID) révén. Tetszőlegesen összetett szerkezetű objektum megengedett (minden az objektummal kapcsolatos információ tárolható, míg a relációs az információ sok relációban szóródik szét). Példányváltozók (instance variables): azon értékeket hordozzák, melyek az objektum belső állapotát írják le. Hasonló a relációs modell attribútumához kivéve, hogy a külső felhasználók számára nem láthatóak. Teljes egységbezárás: minden a felhasználók által használható műveletnek előre definiáltnak kell lenni. (Túl szigorú, pl. a lekérdezésekhez tudni kell az attribútum neveket, az ad-hoc lekérdezéseket nehéz specifikálni.)

Objektumok jellemzői 8 Az egységbezárás támogatására a műveletek két részből állnak: interfész (szignatúra) és metódus (törzs). Az első a művelet nevét és paramétereit írja le, a második a művelet implementációját specifikálja. Típusok és osztályok hierarchiája és öröklődése: típusok és osztályok inkrementális létrehozása, újrahasznosítás Reláció-kezelés: az egységbezárás miatt ez elrejtésre került a külső felhasználók számára (korai rendszerek problémája), az ODMG szabvány ezt megoldotta a bináris kapcsolatok explicit megjelenítésével, inverz hivatkozási párral Verzió-kezelés: egy objektumnak időbeni története van, ennek a nyomonkövetése. Sémaevolúció (ld. ALTER TABLE)

Objektumok jellemzői 9 Művelet túlterhelés (operator overloading): ugyanaz a művelet többféle típusú objektumon is végrehajtható, a művelet nevéhez több különböző implementáció tartozik attól függően, hogy milyen objektumra kívánjuk alkalmazni. (operátor polimorfizmus polymorphism) Késői kötés: a futás során kapcsolódik össze a művelet neve és a megfelelő implementáció.

Objektumok konstrukciója 10 Az O(R)DMS-ekben az objektumok és a literálok (OID nélküli értékek) tetszőleges összetettségű típus szerkezettel bírhatnak, amely az összes szükséges információt tartalmazza. A hagyományos adatbázis rendszerekben az összetett objektumokkal kapcsolatos információk sok relációra illetve rekordra szóródnak szét elvesztve így sokszor a direkt kapcsolatot a valós világ objektumai és azok adatbázisbeli reprezentációi között. databázisokban egy összetett objektum állapota más objektumok alapján határozódik meg ún. típus konstruktorok segítségével. Alapvető típus konstruktorok: atom, rekord (struct, tuple), kollekció (több-értékű). További konstruktorok a kollekción belül: halmaz (set), lista (list), zsák (bag), tömb (array), szótár (dictionary).

Műveletek egységbezárása 11 Cél: absztrakt adattípusok kezelése, információ-elrejtés (szemben a tradicionális relációs modellel, ahol minden reláció összes attribútumával együtt látható a felhasználók és külső programok számára). Egy objektumtípust viselkedésének leírásával definiálunk, melyet az objektumtípushoz külső hozzáférést biztosító műveleteken alapulnak. Műveletek: objektumok létrehozása, törlése, állapotának módosítása, egyes részeihez való hozzáférés biztosítása ill. ezek kombinációi. Műveletek felépítése: interfész (szignatúra) mely a műveletek nevét és paramétereit definiálja (látható), implementáció (metódus) az objektum belső adatszerkezetét és az eléréséhez szükséges műveletek leírását tartalmazza (rejtett). Teljes egységbezárás: túl erős követelmény, általában az objektumok szerkezetét két részre, látható és rejtett attribútumokra osztjuk.

Objektumok állandóságának biztosítása 12 Általában nem minden objektumtípus lesz állandó (perzisztens) egy adatbázisban, ezt külön biztosítani kell. Az állandóság biztosítása: elnevezési mechanizmussal vagy elérhetőséggel történik. Elnevezési mechanizmus: egyértelmű és állandó nevet ad egy objektumnak, mellyel hivatkozhatunk rá külső programokból (belépési pont). Elérhetőségi mechanizmus: segitségével perzisztens objektumokból érhetünk el további objektumokat (így elég kevés számú perzisztens objektumot definiálnunk). Egy B objektum elérhető az A objektumból ha az objektum gráfban hivatkozások (élek) egy sorozata vezet A-ból B-be. Az OSSZES HALLGATO objektum az HALLGATO osztály extentje, amely minden HALLGATO típusú objektumot perzisztenssé tesz.

Típus (osztály) hierarchia és öröklődés 13 Számos objektumot szeretnénk kezelni lehetőleg minél egyszerűbben. Ennek módja új típusok létrehozása korábbiakból. Típus: (név, attribútumok, műveletek) Függvények: attribútumok (példányváltozók), műveletek. Attribútum: argumentum nélküli függvény TYPE NAME: function,..., function Példa: SZEMÉLY: Név, Cím, Szül dátum, Kor, Szsz ahol a Kor művelet, amellyel az életkort számolhatjuk ki, a többi pedig attribútum. Szubtípus (altípus): egy olyan új típus, amely egy már definiált típus összes függvényét tartamazza. Szupertípus (szülőtípus): az a típus, amelyből a szubtípust származtattuk.

Példa öröklődésre 14 SZEMÉLY: Név, Cím, Szül dátum, Kor, Szsz (definiált típus) Tegyük fel, hogy az alábbi új típusokat szeretnénk definiálni: DOLGOZÓ: Név, Cím, Szül dátum, Kor, Szsz, Fizetés, Alk kezdete, Beosztás HALLGATÓ: Név, Cím, Szül dátum, Kor, Szsz, Szak, Tan átlag Mivel mindkettő tartalmazza a SZEMÉLY típus összes függvényét, így annak altípusaként definiálhatóak: DOLGOZÓ subtype-of SZEMÉLY: Fizetés, Alk kezdete, Beosztás HALLGATÓ subtype-of SZEMÉLY: Szak, Tan átlag A DOLGOZÓ altípus tárolt attribútumokként tartalmazza a Fizetés, Alk kezdete és Beosztás attribútumokat. A HALLGATÓ altípus tárolt attribútuma a Szak, míg a Tan átlag műveletként implementálható.

Típus (osztály) hierarchia 15 Típus hierarchia: az összes szuper/szub típus kapcsolat rendszere Átnevezés: hierarchia révén származtatott függvények átnevezése Permanens és tranziens kollekciók Többszörös öröklődés: akkor beszélünk róla ha egy altípus kettő vagy több típus altípusa és így értelemszerűen örökli mindkettő vagy az összes függvényét (attribútumait és metódusait). Szelektív öröklődés: amikor egy altípus csak egy típus bizonyos függvényeit örökli, amelyeket nem azokat az EXPECT klózzal jelezzük

Extentek 16 Ugyanolyan típusú objektumok egy kollekciója A cél az, hogy az objektumainkat állandóvá tegyük Általában az összes azonos típusú objektum szerepel a típushoz tartozó extentben Object: minden objektumot tartalmazó extent Megszorítás az extenteken, hogy legyenek kompatibilisek a típus hierarchiával, azaz az altípus extentje legyen része a szubtípus extentjének. define class HALLGATO CSOPORT type set(hallgato); operations add hallgato(d: HALLGATO): boolean; (új hallgató) remove hallgato(d: HALLGATO): boolean; (hallgató törlése) create hallgato csoport: HALLGATO CSOPORT; (új hallgató csoport létrehozása) destroy hallgato csoport: boolean; (hallgató csoport megszüntetése) end HALLGATO CSOPORT; persistent name OSSZES HALLGATO: HALLGATO CSOPORT; d:=create hallgato; (új hallgató létrehozása a d változóban) b:=osszes HALLGATO.add hallgato(d); (d perzisztenssé tétele)

Objektum-relációs jellemzői 17 SQL:2008 szabvány: a tradicionális RDBMS-ek szemlélettel való bővítése (pl. Oracle, MS SQL Server). A következő objektumorientált jellemzőkkel bővült az SQL: Típus konstruktorok melyekkel összetett objektumokat hozhatunk létre. Például: rekord (row type), mely megfelel a rekord (tuple, struct) konstruktornak tömb (array type), mellyel kollekciókat hozhatunk létre a további kollekció típusokkal, ld. halmaz, lista, zsák, később bővült a szabvány Objektumok azonosítását biztosító mechanizmus a reference type segítségével. Műveletek egységbezárása a felhasználó által defniált típusokon (UDT). A felhasználó által definiált eljárás (UDR) szintén megjelenik. Öröklődési mechanizmus az UNDER kulcsszó segítségével.

UDT: felhasználó által definiált típus 18 Az SQL által nyújtott felhasználó által definiált típus (UDT: user-defined type) célja: összetett szerkezetű (a relációs modell rekordjainál bonyolultabb) objektumok létrehozása egy típus deklarációjának elválasztása a tábla (reláció) létrehozásától rekord típusú konstruktor a ROW kulcsszóval rekord típusú attribútumok létrehozására 4-féle kollekció típus: ARRAY (a kezdeti specifikációban csak ez volt), MULTISET, LIST és SET Egy UDT létrehozásának módja: CREATE TYPE típus neve AS (komponensek deklarációja)

UDT: felhasználó által definiált típus 19 Objektumok azonosítása egyértelmű, rendszer által generált OID-vel referncia típus útján: REF IS SYSTEM GENERATED Emellett használható a relációs modell hagyományos kulcsa is. A példányosítható (INSTANTIABLE kulcsszó) UDT-khez táblákat (relációkat) is létrehozhatunk. Az UDT-khez műveleteket (metódusokat) is definiálhatunk: CREATE TYPE típusnév ( <attribútumok listája a típusaikkal> <metódusok (függvények) deklarációi> ); Attribútumok és műveletek három fajtája: PUBLIC - látható az UDT interfészen PRIVATE - nem látható az UDT interfészen PROTECTED - csak az altípusok számára látható

Példa UDT-ra 20 CREATE TYPE SZEMELY TIPUS AS ( NEV VARCHAR (35), NEM CHAR, SZUL DATUM DATE, LAKCIM CIM TIPUS INSTANTIABLE NOT FINAL REF IS SYSTEM GENERATED INSTANCE METHOD AGE() RETURNS INTEGER; CREATE INSTANCE METHOD AGE() RETURNS INTEGER FOR SZEMELY TIPUS BEGIN RETURN /* programkód egy személy életkorának kiszámolására a mai dátumból és a SZUL DATUM-ból */ END; );

Példa UDT-ra 21 Lakcím típusát a következőképpen definiáljuk: CREATE TYPE CIM TIPUS AS ( UTCA CIM ROW (KOZTERULET VARCHAR (10), NEV VARCHAR (25), HAZSZAM NUMBER (4), EMELET NUMBER (2) ), AJTO NUMBER (2) ), VAROS VARCHAR (25), IR SZAM NUMBER (4) ); A kódban szereplő ROW kulcsszóval egy összetett rekordot tudunk megadni, amely az utcai címet több komponensből álĺıtja elő. Vegyük észre, hogy ez a típus nem példányosítható hiszen szerepe csupán az, hogy a SZEMELY TIPUS lakcímét deklarálni tudjuk.

Példa UDT-ra: szubtípus létrehozása 22 CREATE TYPE KURZUS TIPUS AS ( KURZUS KOD CHAR (8), EV CHAR (4), JEGY CHAR ); CREATE TYPE HALLGATO TIPUS UNDER SZEMELY TIPUS AS ( SZAK KOD CHAR (10), NEPTUN KOD CHAR (6), SZEMESZTER NUMBER (2), KURZUSOK KURZUS TIPUS ARRAY [100] INSTANTIABLE ); A HALLGATO altípusa a SZEMELY-nek, viszont már nem lehet neki további altípusa. Egy hallgató által felvett kurzusokat egy 100 elemű tömbben tároljuk. Mindkét típus példányosítható.

Táblák létrehozása 23 Az alább létrehozzuk az egyetemi dolgozók, oktatók és hallgatók tábláját: CREATE TABLE DOLGOZO OF SZEMELY TIPUS REF IS DOLGOZO ID SYSTEM GENERATED; CREATE TABLE HALLGATO OF HALLGATO TIPUS UNDER DOLGOZO; CREATE TABLE OKTATO OF OKTATO TIPUS UNDER DOLGOZO; A DOLGOZO tábla egyetemi dolgozókból, mint rekordok, fog állni, amelyek mindegyikének típusa SZEMELY TIPUS. Az SQL egy további képessége a táblaöröklődés a szuper/szubtábla kapcsolat útján az UNDER kulcsszó révén. Minden beszúrás (INSERT) a HALLGATO vagy az OKTATO táblákba egyben egy beszúrást jelent a DOLGOZO szupertáblába is. Hasonló igaz a többi DML műveletre is (DELETE, UPDATE).

Öröklődés és művelet túlterhelés 24 Az SQL szabályai típus öröklődésre az UNDER kulcsszó alatt: A NOT FINAL kulcsszót kell használni ha egy UDT-nek további altípusát szeretnénk deklarálni. Minden attribútum öröklődik. A szupertípusok sorrendje az UNDER kulcsszó után határozza meg az öröklődési sorrendet. Egy altípus példánya minden olyan kontextusban használható ahol szupertípusának példánya használható. Egy altípus minden a szupertípuson definiált függvényt újradefiniálhat feltéve hogy a szignatúra nem változhat. Egy függvény hívásakor a legjobban illeszkedő implementáció kerül alkalmazásra az összes argumentum típusát figyelembe véve. Dinamikus kötéskor a paraméterek futáskori típusait veszi figyelembe.