எளிய, இனிய கணினி மொழி – ரூபி – 14 – ரூபியில் பொருள் நோக்கு நிரலாக்கம்

ரூபி பொருள் நோக்கு பயன்பாடுகளை (object oriented applications) உருவாக்க ஏதுவான சூழலைத்தருகிறது. பொருள் நோக்கு நிரலாக்கம் பற்றிய களம் மிகவும் பெரியது. அதை பற்றிய முழுமையாக விளக்கத்தை அளிப்பது இந்த பதிவின் நோக்கமல்ல. ஆகையால் பொருள் நோக்கு நிரலாக்கத்தின் அடிப்படை கருத்துகளையும், ரூபி நிரலாக்கத்திற்கு தேவையான கருத்துகளையும் மட்டும் பார்க்கலாம்.

பொருள் என்றால் என்ன:
பொருள் (Object) என்பது எளிமையான, சிறு செயல்பாட்டினை, தன்னுள் கொண்டதாகும். இது பலமுறை பயன்படுத்தக்கூடியதாகவும், ஒரு மென்பொருளை நிர்மாணிக்க தேவையான அடிப்படை கூறாகவும் பயன்படுகிறது. பொருளில் தரவு மாறிகளும் (data variable), செயற்கூறுகளும் (function/method) இருக்கும். இவை ஒரு பொருளின் உறுப்பினர்கள் (members) என அழைக்கப்படுகின்றன.
ரூபியில், எண்கள் முதல் string, array வரை எல்லாமே பொருட்கள் தான்.

வர்க்கம் என்றால் என்ன?:
கட்டிடம் கட்டியபிறகு எப்படி இருக்கும் என்பதை, ஒரு வரைபடம் விளக்குவதுபோல, வர்க்கமானது (class), ஒரு பொருள் (object) எப்படி உருவாக்கப்படவேண்டும் என்பதை விளக்குகிறது. உதாரணத்திற்கு, செயற்கூறுகள் என்ன செய்யும், என்னென்ன மாறிகள் உறுப்பினர்களாக இருக்கும் என்பதை விளக்குவதாகும்.

Inheritance என்பது ஏற்கனவே உள்ள வர்க்கத்தை அடிப்படையாகக்கொண்டு, புது வர்க்கத்தை உருவாக்குவதாகும். இதில் புது வர்க்கமானது (subclass) parent class (super class) லிருந்து எல்லா அம்சங்களையும் மரபுரிமையாகப்பெற்றிருக்கும். அதோடு sub class-யில், super class-யில்லாத செயல்பாடுகளையும் சேர்க்கலாம். ரூபி single inheritance-யை ஆதரிக்கிறது. அப்படியென்றால் subclass ஆனது ஒரேயொரு superclass-யிலிருந்து மட்டும் inherit செய்யப்படும்.
Java போன்ற மற்ற மொழிகள் multiple inheritance-யை ஆதரிக்கும். அதாவது subclass ஆனது ஒன்றுக்கு மேற்பட்ட superclasses-யை inherit செய்யும்.

ரூபி வர்க்கத்தின் வரையறை:
இந்த பயிற்சிகாக வங்கிப்பயன்பாட்டின், ஒரு பகுதியாக ஒரு புதிய வர்க்கத்தை உருவாக்கலாம்.
வர்க்கங்களை class என்ற திறவுச்சொல் (keyword) கொண்டு வரையறுக்க வேண்டும். end என்ற திறவுச்சொல் கொண்டு முடிக்க வேண்டும்.
வர்க்கத்தை அதன் பெயரை கொண்டு அறிய வேண்டும். வர்க்கத்தின் பெயர் ஒரு மாறிலி (constant) ஆகும். அதனால் வர்க்கத்தின் பெயரை UpperCamelCase முறையில் எழுதவேண்டும்.

ஒரு வர்க்கத்தை பின்வருமாறு வரையறுக்கலாம்:

[code lang=”ruby”]
class BankAccount
def initialize ()
end

def test_method
puts "The class is working"
end
end
[/code]

மேலே உள்ள எடுத்துக்காட்டில், வர்க்கத்தின் பெயர் BankAccount ஆகும், அதில் test_method என்றொரு செயற்கூறு உள்ளது. இந்த செயற்கூற்றில் string-யை அச்சிடும் நிரல் உள்ளது.
மேலும் initialize செயற்கூறு, ரூபியின் ஒரு நிலையான (standard) “வர்க்க செயற்கூறு” (class method) ஆகும். வர்க்கத்திற்கு பொருட்களை உருவாக்கும் பொழுது initialize செயற்கூறு தான் முதலில் அழைக்கப்படும். இந்த செயற்கூற்றில் எந்த நிரலை வேண்டுமானாலும் எழுதலாம். Java, C# போன்ற மொழிகளிலுள்ள constructor-க்கு இணையாக இதைக்கருதலாம்

வர்க்கத்தின் பொருட்களை உருவாக்குதல்:

வர்க்கத்திலிருந்து ஒரு பொருளை உருவாக்க new என்ற செயற்கூற்றை பயன்படுத்த வேண்டும். உதாரணத்திற்கு,BankAccount என்கிற வர்க்கத்திற்கு instance உருவாக்க பின்வருமாறு எளிமையாக எழுதலாம்:

[code lang=”ruby”]
account = BankAccount.new()
[/code]

இப்போழுது, BankAccount-ற்கு account எனும் பொருள் உருவாக்கப்பட்டுள்ளது. உருவாக்கிய பொருளைக்கொண்டு test_method-டை அழைக்கலாம்:

[code lang=”ruby”]
account.test_method
=> The class is working
[/code]

உருபொருள் மாறிகளும், அணுக்க செயற்கூறுகளும்:
உருபொருள் மாறி (Instance variable) என்பது ஒரு மாறி. அது வர்க்கத்தில் வரையறுக்கப்பட்டிருக்கும், அது வர்க்கத்தின் ஒவ்வொரு உருபொருளுக்கும் கிடைக்ககூடியாக இருக்கும். இவ்வகை மாறிகளை வர்க்க செயற்கூறுகளின் (class methods) உள்ளேயோ அல்லது வெளியவோ வரையறுக்கலாம். பொதுவான இவை initialize செயற்கூற்றில் வரையறுக்கப்படும். மாறிகளை வர்க்கத்திற்கு வெளியில் பயன்படுத்துவதற்கு, அணுக்க செயற்கூறுகளை (accessor methods/getter method) வரையறுக்க வேண்டும்.
உதாரணத்திற்கு, நமது BankAccount வர்க்கத்தில் உருபொருள் மாறிகளை சேர்க்க:

[code lang=”ruby”]
class BankAccount
def initialize
@accountNumber = "12345"
@accountName = "John Smith"
end

def accountNumber
@accountNumber
end

def accountName
@accountName
end

def test_method
puts "The class is working"
puts accountNumber
end
end
[/code]

இப்போழுது, @accountNumber மற்றும் @accountName இரண்டு உருபொருள் மாறிகள், அணுக்க செயற்கூறுகளுடன் இணைந்துள்ளது. இப்போழுது இந்த மாறிகளை நாம் வெளியிலிருந்து பயன்படுத்த முடியும்,

[code lang=”ruby”]
account = BankAccount.new()
puts account.accountNumber
puts account.accountName
[/code]

மேலே உள்ள இரண்டு puts கட்டளைகளும் அணுக்க செயற்கூறுகள் திருப்பி அனுப்பும் இரண்டு மாறிகளின் மதிப்பை (நமது எடுத்துக்காட்டில் “12345” மற்றும் “John Smith”) அச்சிடும்.
இப்போழுது உருபொருள் மாறிகளின் மதிப்பைப்பெற (get) முடியும். அடுத்ததாக உருபொருள் மாறிகளில் மதிப்பைப்பொருத்த (set) setter செயற்கூறுகளை பயன்படுத்தலாம்.

[code lang=”ruby”]
class BankAccount

def account_number
@account_number
end

def account_number=( value )
@account_number = value
end

def account_name
@account_name
end

def account_name=( value )
@account_name = value
end
end
[/code]

இப்போழுது வர்க்கதிற்கு ஒரு உருபொருளை உருவாக்கி, setter method-டை பயன்படுத்தி name மற்றும் account_number-க்கு மதிப்பை பொருத்தலாம். மேலும் getters-யை பயன்படுத்தி அதை பெறலாம்,

[code lang=”ruby”]
account = BankAccount.new()

account.accountNumber = "54321"
account.accountName = "Fred Flintstone"

puts account.accountNumber
puts account.accountName
[/code]

ரூபி வர்க்க மாறிகள்:
வர்க்க மாறி (Class variable) என்பது ஒரு மாறி. அது வர்க்கத்தின் எல்லா உருபொருட்களாலும் பகிர்ந்துக்கொள்ளப்படும். வர்க்க மாறிகளை வர்க்கத்தின் வரையறையில் initialize செய்ய வேண்டும். இவற்றின் பெயருக்கு முன்னர் இரண்டு @ குறியீடுகள்(@@) கொடுக்க வேண்டும்.
இதை விளக்க, @@interest_rate என்கிற வர்க்க மாறியை சேர்க்கலாம்.(இதனால் ஒரே interest மதிப்பு தான் எல்லா bank accounts-ற்கும்)

[code lang=”ruby”]
class BankAccount

@@interest_rate = 0.2

def interest_rate
@@interest_rate
end

def account_number
@account_number
end

def account_number=( value )
@account_number = value
end

def account_name
@account_name
end

def account_name=( value )
@account_name = value
end
end
[/code]

உருபொருள் செயற்கூறுகள்:
உருபொருள் செயற்கூறுகள் (Instance methods) என்பது வர்க்கத்தின் உருபொருளைக்கொண்டு அழைக்கப்படும். இவ்வகை செயற்கூறுகள் வர்க்க மாறிகளையும், arguments மதிப்பையும் ஏற்று செயல்பாடிற்கு பயன்படுத்தும். உதாரணத்திற்கு, நமது வர்க்கத்தில் ஒரு புது செயற்கூற்றை உருவாக்கி, அதில் புது account balance-யை argument-ஆக பெற்று, மேலும் @@interest_rate-டை பயன்படுத்தி interest due-வை கணக்கிடலாம்.

[code lang=”ruby”]
def calc_interest ( balance )
balance * interest_rate
end
[/code]

இப்பொழுது வர்க்கத்திற்கு உருபொருளை உருவாக்கி புதிய செயற்கூற்றை அழைக்கலாம்:

[code lang=”ruby”]
account = BankAccount.new()
account.calc_interest 1000
200.0 # 1000 * 0.2
[/code]

ரூபி class inheritance:
ரூபி single inheritance-யை ஆதரிக்கும். இதில் subclass உருவாக்கி மற்றொரு class-யிலிருந்து எல்லா உறுப்பினர்களையும் (variables மற்றும் methods) inherit செய்யலாம். மேலும் subclass-ல் superclass-யில்லாத புதிய உறுப்பினர்களையும் உருவாக்கலாம்.
ஒரு வர்க்கத்திலிருந்து இன்னொரு வர்க்கத்தை inherit செய்ய < குறியீட்டை பயன்படுத்த வேண்டும். உதாரணத்திற்கு, ஒரு NewBankAccount வர்க்கத்தை உருவாக்குவோம். இந்த வர்க்கத்திற்கு அசல் வர்க்கத்திலுள்ள எல்லா உறுப்பினர்களோடு, வாடிக்கையாளரின் தொலைபேசி எண்ணும் தேவை . இதை செய்ய,BankAccount வர்க்கத்தை inherit செய்து, மேலும் புதிய உருபொருள் மாறியையும் சேர்க்க வேண்டும்.

[code lang=”ruby”]
class NewBankAccount < BankAccount

def customer_phone
@customer_phone
end

def customer_phone=( value )
@customer_phone = value
end
end
[/code]

இப்போது BankAccount வர்க்கத்திலிருந்து தருவிக்கப்பட்ட (derived) ஒரு புதிய வர்க்கம் உள்ளது. இந்த புதிய subclass, superclass-ல் உள்ள எல்லா உடைமைகளும் உள்ளது மேலும், இந்த வர்க்கத்தில் புதிதாக வாடிக்கையாளரின் தொலைபேசி எண்ணும் உள்ளது.

[code lang=”ruby”]
account.account_number = "54321"
account.customer_phone = "555-123-5433"
54321
555-123-5433
[/code]

மேலே உள்ள எடுத்துக்காட்டில், BankAccount வர்க்கத்தின் வரையறையும், NewBankAccount வர்க்கத்தின் வரையறையும், ஒரே கோப்பில் உள்ளது. இதே BankAccount வர்க்கம் வேறு கோப்பில் இருந்தால் require கட்டளையை பயன்படுத்தி BankAccount வர்க்கம் உள்ள கோப்பினை உள்ளடக்க (include) வேண்டும். BankAccount வர்க்கம், “BankAccount.rb” கோப்பில் வரையறுக்கப்பட்டுள்ளது என்று வைத்துக்கொண்டால். அதை பின்வருமாறு செய்யலாம்,

[code lang=”ruby”]
require ‘BankAccount’

class NewBankAccount < BankAccount

def customer_phone
@customer_phone
end

def customer_phone=( value )
@customer_phone = value
end

end
[/code]

— தொடரும்

பிரியா – priya.budsp@gmail.com – ஐக்கிய அரபு அமீரகம்

%d bloggers like this: