# ഒബ്ജക്റ്റ് ഓറിയന്റഡ് പ്രോഗ്രാമിങ് ഭാഷ

**ഇംഗ്ലീഷ് വിലാസം**

ഒരു ക്ലാസിനുള്ള UML നൊട്ടേഷൻ. ഈ ബട്ടൺ ക്ലാസിൽ ഡാറ്റയ്ക്കും ഫംഗ്ഷനുകൾക്കുമായി വേരിയബിളുകൾ ഉണ്ട്. ഇൻഹെറിന്റസിലൂടെ, ബട്ടൺ ക്ലാസിൻ്റെ ഒരു ഉപവിഭാഗമായി വേറൊരു ഉപവിഭാഗം സൃഷ്ടിക്കാൻ കഴിയും. ഒബ്ജക്റ്റുകൾ ഒരു ക്ലാസിൻ്റെ ഉദാഹരണങ്ങളാണ്.
ആശയങ്ങൾ **വസ്തു**ക്കളായി പ്രതിനിധാനം ചെയ്യപ്പെടുന്ന കമ്പ്യൂട്ടർ പ്രോഗ്രാമിങ് ഭാഷകളാണ് **ഒബ്ജക്റ്റ് ഓറിയന്റഡ് പ്രോഗ്രാമിങ് ഭാഷകൾ**. ഒബ്ജക്റ്റ് ഓറിയന്റഡ് പ്രോഗ്രാമിങ്ങിലെ വസ്തുക്കൾ ഡാറ്റാഫീൽഡു(data field)കളും അവയുമായി ബന്ധപ്പെട്ട, മെത്തേഡുകൾ എന്ന് അറിയപ്പെടുന്ന പ്രക്രിയകളും ഉൾപ്പെടുന്നതാണ്. ഒബ്ജക്റ്റ് ഓറിയന്റഡ് പ്രോഗ്രാമിങ്ങിന്റെ കരട് ആശയങ്ങൾ ആദ്യമായി രൂപം കൊണ്ടത് 1960 കളിൽ എം ഐ റ്റി(Massachsets Institute Of Technology) കൃത്രിമ ബുദ്ധി (artificial intelligence) ലാബിൽ നിന്നാണ്. ലിസ്പ് (LISP) ഭാഷയിലാണ് ഇതിന്റെ ചില സങ്കേതങ്ങൾ ആദ്യമായി പ്രാവർത്തികമാക്കിയതെങ്കിലും ആദ്യത്തെ സമ്പൂർണ്ണ ഒബ്ജക്റ്റ് ഓറിയന്റഡ് പ്രോഗ്രാമിങ് ഭാഷ എന്ന് അറിയപ്പെടുന്നത് സ്മാൾ ടാക് (smalltalk) ആണ്.

ഒബ്ജക്റ്റുകളുടെ ഒരു സവിശേഷത, ഒരു വസ്തുവിന്റെ സ്വന്തം നടപടിക്രമങ്ങൾക്ക് അതിന്റേതായ ഡാറ്റാ ഫീൽഡുകൾ ആക്സസ് ചെയ്യാനും പലപ്പോഴും പരിഷ്കരിക്കാനും കഴിയും (വസ്തുക്കൾക്ക് ഇപ്രകാരമുള്ള നോട്ടേഷനുകൾ ഉപയോഗിക്കുന്നു`this` or `self`). ഊപ്(OOP), കമ്പ്യൂട്ടർ പ്രോഗ്രാമുകൾ രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത് അവ പരസ്പരം ഇടപഴകുന്ന ഒബ്‌ജക്റ്റുകളിൽ നിന്നാണ്. ഊപ്സ് ഭാഷകൾ‌ വൈവിധ്യമാർ‌ന്നതാണ്, പക്ഷേ ഏറ്റവും പ്രചാരമുള്ളവ ക്ലാസ് അധിഷ്ഠിതമാണ്, അതായത് വസ്തുക്കൾ‌ ക്ലാസുകളുടെ ഉദാഹരണങ്ങളാണ്, അവ അവയുടെ തരങ്ങളും(types) നിർ‌ണ്ണയിക്കുന്നു.

ഏറ്റവും വ്യാപകമായി ഉപയോഗിക്കുന്ന പല പ്രോഗ്രാമിംഗ് ഭാഷകളും (സി++, ജാവ, പൈത്തൺ മുതലായവ) മൾട്ടി-പാരഡിഗം ആണ്, അവ ഒബ്ജക്റ്റ് ഓറിയെന്റഡ് പ്രോഗ്രാമിംഗിനെ ഗ്രേറ്റർ അല്ലെങ്കിൽ ലേസ്സർ ആയി പിന്തുണയ്ക്കുന്നു, സാധാരണ പ്രോസീജിറൽ പ്രോഗ്രാമിംഗ്, ഇംമ്പറേറ്റീവ് പ്രോഗ്രാമിംഗ് എന്നിവയുടെ സംയോജനമാണ്. ജാവ,പിഎച്ച്പി, സി ഷാർപ്പ്(C#), സി++, പൈത്തൺ, ആർ(R),വിഷ്വൽ ബേസിക്ക്.നെറ്റ്, ജാവാസ്ക്രിപ്റ്റ്, റൂബി, പേൾ, ഒബജക്ട് പാസ്കൽ, ഒബജക്ടീവ് സി, ഡാർട്ട്, സ്വിഫ്റ്റ്, സ്കാല,കോട്ലിൻ,കോമൺ ലിസ്പ്, മാറ്റ്‌ലാബ് എന്നിവയാണ് ഇപ്പോൾ കൂടുതൽ പ്രചാരത്തിലുള്ള ഒബ്ജക്റ്റ് ഓറിയന്റഡ് പ്രോഗ്രാമിങ് ഭാഷകൾ.

## ചരിത്രം

ആധുനിക ഒബ്ജക്റ്റ്-ഓറിയൻ്റഡ് പ്രോഗ്രാമിംഗിൽ ഉപയോഗിക്കുന്ന "വസ്തുക്കൾ" എന്ന പദം 1950-കളുടെ അവസാനത്തിലും 1960-കളുടെ തുടക്കത്തിലും എംഐടിയുടെ ആർട്ടിഫിഷ്യൽ ഇൻ്റലിജൻസ് ഗ്രൂപ്പിൽ പ്രത്യക്ഷപ്പെട്ടു. അക്കാലത്ത്, "വസ്തു" എന്നത് ലിസ്പ് ആറ്റങ്ങളെ പരാമർശിച്ചു, അവയ്ക്ക് പ്രത്യേക ആട്രിബ്യൂട്ടുകളോ പ്രോപ്രട്ടികളോ ഉൾപ്പെടുത്തിയിരിക്കുന്നു. 1960-1961 കാലഘട്ടത്തിൽ എംഐടിയിൽ ഇവാൻ സതർലാൻഡ് സൃഷ്ടിച്ച സ്കെച്ച്പാഡ്, ഒബ്ജക്റ്റ് ഓറിയൻ്റഡ് ആശയങ്ങളുടെ ആദ്യകാല ഉദാഹരണമായിരുന്നു. തൻ്റെ 1963-ലെ സാങ്കേതിക റിപ്പോർട്ടിൽ, ഗ്രാഫിക്കൽ ഇൻ്ററാക്ഷനുമായി ബന്ധപ്പെട്ട് സതർലാൻഡ് "ഒബജക്ട്", "ഇൻസ്റ്റൻസ്(instance)" തുടങ്ങിയ പദങ്ങൾ അവതരിപ്പിച്ചു. ഒരു "മാസ്റ്റർ" അല്ലെങ്കിൽ "ഡെഫനിക്ഷൻ" എന്ന ആശയവും അദ്ദേഹം വിവരിച്ചു, അത് ഒരു ക്ലാസിൻ്റെ ആധുനിക ആശയത്തിന് സമാനമാണ്. ഈ ആശയങ്ങൾ അക്കാലത്ത് ഗ്രാഫിക്സിന് മാത്രമായിരുന്നുവെങ്കിലും, പിന്നീട് അവ ഒബ്ജക്റ്റ് ഓറിയൻ്റഡ് പ്രോഗ്രാമിംഗിൻ്റെ അടിസ്ഥാനമായി. 1968-ൽ, എംഐടിയിൽ വികസിപ്പിച്ച എഇഡി-0(AED-0) എന്ന പ്രോഗ്രാമിംഗ് ഭാഷാ പതിപ്പ്, ഡാറ്റാ ഘടനകളും അവയിൽ പുതിയ രീതിയിൽ നടപ്പിലാക്കാൻ കഴിയുന്ന പ്രവർത്തനങ്ങളും ബന്ധിപ്പിച്ചു. "പ്ലെക്സുകൾ" എന്ന് വിളിക്കപ്പെടുന്ന കാര്യങ്ങളിൽ ഡാറ്റ സംഭരിച്ചു, ഇവ നിർദ്ദേശങ്ങളോ പ്രവർത്തനങ്ങളോ പോലെയുള്ള നടപടിക്രമങ്ങളുമായി ബന്ധിപ്പിച്ചിരിക്കുന്നു. കോഡിലെ ഒബ്‌ജക്റ്റുകൾക്ക് ഡാറ്റയും പ്രവർത്തനങ്ങളും ഒരുമിച്ച് ചേർക്കാൻ കഴിയുന്ന ആധുനിക പ്രോഗ്രാമിംഗിൽ നമ്മൾ ഇപ്പോൾ "മെത്തേഡ്സ്" അല്ലെങ്കിൽ "ഫങ്ഷൻസ്" എന്ന് വിളിക്കുന്നതിൻ്റെ ആദ്യകാല പതിപ്പായിരുന്നു ഈ ആശയം. മോഡുലാർ, പുനരുപയോഗിക്കാവുന്ന കോഡ് സൃഷ്ടിക്കുന്നതിനും വേണ്ടി ഒടുവിൽ സ്വാധീനിക്കപ്പെട്ട ഒബ്ജക്റ്റ്-ഓറിയൻ്റഡ് പ്രോഗ്രാമിംഗ് (OOP) എന്നിവയ്ക്കും ഈ ആശയങ്ങൾ പ്രധാനമാണ്, അവിടെ എല്ലാം പരസ്പരം ഇടപഴകാൻ കഴിയുന്ന ഒബ്‌ജക്റ്റുകളായി ക്രമീകരിച്ചിരിക്കുന്നു. ഈ കാലയളവിൽ ഡാറ്റാ ആബ്സ്ട്രാക്ഷനും മൊഡ്യൂളാർ പ്രോഗ്രാമിംഗും പോലുള്ള വിഷയങ്ങൾ പൊതുവായ ചർച്ചാവിഷയങ്ങളായിരുന്നു.

എംഐടിയിലെ എഇഡി(AED) പോലുള്ള പിന്നീട് നടന്ന പ്രവർത്തനങ്ങളിൽ നിന്ന് സ്വതന്ത്രമായി, സിമുല 1961 മുതൽ 1967 വരെയുള്ള കാലയളവിൽ വികസിപ്പിക്കപ്പെട്ടു. സിമുല പ്രോഗ്രാമിംഗ് ഭാഷ ഇന്നത്തെ ഒബ്ജക്ട്-ഓറിയന്റഡ് പ്രോഗ്രാമിംഗ് അടിസ്ഥാനമാക്കി മൂല്യവത്തായ ആശയങ്ങൾ പരിചയപ്പെടുത്തി. ഇതിൽ ക്ലാസ്, ഒബ്‌ജക്ട്, ഇൻഹെറിറ്റൻസ്, ഡൈനാമിക് ബൈൻഡിംഗ് എന്നിവ ഉൾപ്പെടുന്നു (ഡൈനാമിക് ബൈൻഡിംഗ് അർഥമാക്കുന്നത്, പ്രോഗ്രാം പ്രവർത്തിക്കുന്ന സമയത്ത് എന്ത് പ്രവർത്തനം (function) നടത്തണം എന്ന് അപ്പോഴാണ് തീരുമാനിക്കുന്നത്, അതുപോലെ പ്രോഗ്രാം ഒരേപോലെ പ്രവർത്തിക്കും എന്നും), ഇവ ഇപ്പോൾ ആധുനിക പ്രോഗ്രാമിംഗ് അടിസ്ഥാനഘടകങ്ങളാണ്.

## സവിശേഷതകൾ

ഒബ്‌ജക്റ്റ് ഓറിയെന്റഡ് പ്രോഗ്രാമിംഗിൽ ഒബ്‌ജക്റ്റുകൾ ഉപയോഗിക്കുന്നു, എന്നാൽ ഊപ് പിന്തുണയ്ക്കുന്നുവെന്ന് അവകാശപ്പെടുന്ന ഭാഷകളിൽ ബന്ധപ്പെട്ട എല്ലാ സാങ്കേതികതകളും ഘടനകളും നേരിട്ട് പിന്തുണയ്ക്കുന്നില്ല. ശ്രദ്ധേയമായ ഒഴിവാക്കലുകൾക്കൊപ്പം ചുവടെ ലിസ്റ്റുചെയ്‌തിരിക്കുന്ന സവിശേഷതകൾ ശക്തമായ ക്ലാസ്- ഒബ്‌ജക്റ്റ്-ഓറിയന്റഡ് (അല്ലെങ്കിൽ ഊപ്സ് പിന്തുണയുള്ള മൾട്ടി-പാരഡിഗം) ആയി കണക്കാക്കപ്പെടുന്ന ഭാഷകളിൽ സാധാരണമാണ്.

ഇതും കാണുക: പ്രോഗ്രാമിംഗ് ഭാഷകളുടെ താരതമ്യം (ഒബ്ജക്റ്റ്-ഓറിയന്റഡ് പ്രോഗ്രാമിംഗ്) ഒബ്ജക്റ്റ് ഓറിയന്റഡ് പ്രോഗ്രാമിംഗ് പദങ്ങളുടെ പട്ടിക

### ഊപ് ഇതര ഭാഷകളുമായുള്ള പങ്കിടൽ

* പൂർണ്ണസംഖ്യകളും ആൽഫാന്യൂമെറിക് പ്രതീകങ്ങളും പോലുള്ള അന്തർനിർമ്മിത ഡാറ്റ തരങ്ങളിൽ ഫോർമാറ്റുചെയ്‌ത വിവരങ്ങൾ സംഭരിക്കാൻ കഴിയുന്ന വേരിയബിളുകൾ. മെമ്മറി പോയിന്ററുകൾ ഉപയോഗിച്ച് വേരിയബിളുകൾ സംയോജിപ്പിക്കുന്നതിന്റെ ഫലമായി അന്തർനിർമ്മിതമായ അല്ലെങ്കിൽ സ്ട്രിംഗുകൾ, ലിസ്റ്റുകൾ, ഹാഷ് ടേബിളുകൾ എന്നിവ പോലുള്ള ഡാറ്റാ ഘടനകൾ ഇതിൽ ഉൾപ്പെട്ടേക്കാം.
* പ്രോസീജീഴേസ് - ഫംഗ്ഷനുകൾ, രീതികൾ, റുട്ടീനുകൾ അല്ലെങ്കിൽ സബ്റൂട്ടീനുകൾ എന്നും അറിയപ്പെടുന്നു - അവ ഇൻപുട്ട് എടുക്കുകയും ഔട്ട്പുട്ട് സൃഷ്ടിക്കുകയും ഡാറ്റ കൈകാര്യം ചെയ്യുകയും ചെയ്യുന്നു. ആധുനിക ഭാഷകളിൽ ലൂപ്പുകളും കണ്ടീഷണലുകളും പോലുള്ള സ്ട്രക്ചേർഡ് പ്രോഗ്രാമിങ് കൺസ്ട്രക്ടറുകളും ഉൾപ്പെടുന്നു.

മൊഡ്യൂളാർ പ്രോഗ്രാമിംഗ് ഉപയോഗിച്ചാൽ, കോഡിൽ ഉള്ളവ ചെറിയ ഭാഗങ്ങളാക്കി ഫയലുകളിലും മൊഡ്യൂളുകളിലും വെയ്ക്കാം. കോഡിനെ ചെറുതായും ക്രമബദ്ധമായും വിഭജിക്കാം. ഓരോ ഭാഗത്തിനും സ്വന്തം പേരിടൽ സ്ഥലം (namespace) ഉണ്ടാകുന്നതിനാൽ, ഒരു കോഡിലെ പേരുകൾ മറ്റൊരു കോഡുമായി ക്ലാഷാകില്ല. അതായത്, ഒരു ഫയലിൽ ഉള്ള പ്രോഗ്രാമിന്റെയും മറ്റൊരു ഫയലിലെന്നും അതിനിടയിൽ നാമങ്ങൾ ഒരേപോലെ ആയാലും പ്രശ്നമുണ്ടാകില്ല.

## അവലംബം