Professional Documents
Culture Documents
Java in Bengali
Java in Bengali
Java in Bengali
জাভা
সূিচপ
পিরিচিত 0
উপ মিণকা 1
পাঠ ১: তামার থম জাভা া াম 2
পাঠ ২: িসনট া 3
পাঠ ৩: ডাটা টাইপস এবং অপােরটর 4
পাঠ ৩.১: এের 4.1
পাঠ ৩.২: এ ে শান(Expressions), টেম (Statements) এবং ক(Blocks) 4.2
পাঠ ৪: কে াল া -লুিপং- াি ং 5
পাঠ ৫: অবেজ ওিরেয়ে ড া ািমং-১ 6
পাঠ ৫.১: ইনেহিরট া 6.1
পাঠ ৫.২: পিলফরিফজম 6.2
পাঠ ৫.৩: এনক াপসুেলশান 6.3
পাঠ ৬: জাভা এে পশান হ াে িলং 7
পাঠ ৬.১: াজার লুক 8
পাঠ ৭: ি ং অপােরশান 9
পাঠ ৮: জেনিরকস 10
পাঠ ৯: জাভা আই/ও 11
পাঠ ১০: জাভা এন আই/ও 12
পাঠ ১১: জাভা কােলকশান মওয়াক 13
পাঠ ১২: জাভা জিডিবিস 14
পাঠ ১৩: জাভা লিগং 15
পাঠ ১৪: িডবািগং 16
পাঠ ১৫: ািফক াল ইউজার ই ারেফইস 17
পাঠ-১৬: ড 18
পাঠ ১৭: নটওয়ািকং 19
পাঠ ১৮: জাভা কনকােরি 20
পাঠ ১৯: াস ফাইল এবং বাইটেকাড 21
পাঠ ২০: Understanding performance tuning 22
পাঠ ২১: মডান জাভা ইউেজস 23
অনুশীলন 24
1
বাংলায় জাভা
2
বাংলায় জাভা
জাভা া ািমং
Like Share 9.9K people like this. Sign Up to see what your friends like.
সংে প
কােসর বণনা: জাভা বতমােন ব ল ব ব ত একিট া ািমং ল াং েয়জ। এ ার াইজ এি ক াশান
ডেভেলপেমে এখেনা জাভার িবক তির হয়িন বেল ধরা হয়। জাভার জনি য়তার মুল কারণ এর portability,
িনরাপ া, এবং অবেজ ওিরেয়ে ড া ািমং ও ওেয়ব া ািমং এর পিরপূণ সােপাট। এই কােস জাভার অ আ
ক খ থেক কের এর ব বহািরক েয়াগ এবং অন ন িবষয় েলা িনেয় আেলাচনা করা হেব।
কােদর জেন কাস: এই কাস মূলত িব িবদ ালয় এর থম বেষর ছা -ছা ীেদর জেন যারা অবেজ ওিরেয়ে ড
কনেস করেত চায়। তেব য কও চাইেল এই কাসিট করেত পাের। ধের নওয়া হে য, িশ াথী অ ত য
কান একিট া ািমং ল াং েয়জ (িস/িস++) স েক আেগ থেকই ধারণা রােখ।
Statutory warning
This book may contain unexpected misspellings. Reader Feedback Requested.
ওেপন সাস
এই বইিট মূলত া েম লখা এবং বইিট স ূন ওেপন সাস । এখােন তাই আপিনও অবদান রাখেত পােরন
লখক িহেসেব । আপনার কি িবউশান গৃ হীত হেল অবদানকারীেদর তািলকায় আপনার নাম যাগ কের দওয়া হেব ।
এিট মূলত একিট িগটহাব িরেপািজেটাির যখােন এই বইেয়র আিটেকল েলা মাকডাউন ফরম ােট লখা হে ।
িরেপাজটিরিট ফক কের পুল িরকুেয় পাঠােনার মাধ েম আপনারাও অবদান রাখেত পােরন । িব ািরত দখেত পােরন
এই িভিডওেত Video
পিরিচিত 3
বাংলায় জাভা
পিরিচিত 4
বাংলায় জাভা
উপ মিণকা
১৯৯৫ সােলর ২৩ শ ম। ঝকঝেক ঝলমেল চমৎকার একিট িদন। জন গইজ, িডের র অব সান মাইে ািসে ম
সােথ Marc Andreesen, কা ফাও ার এবং ভাইস িসেড অব নটে প ঘাষণা দন য, জাভা টকেনালিজ
মােটই কান উপকথা নয়, বরং এিটই বা বতা এবং তারা এিট Netscape Navigator এর সংযু হেত যাে ।
স সময় জাভােত কাজ কের এমন লােকর সংখ া ি েশরও কম। তারা কখেনাই িচ া কের িন, তােদর এই িটম
ভিবষ ৎ পৃিথবীর ধানতম টকেনালিজ িনধারণ করেত যাে । ২০০৪ সােলর ৩ জানুয়ারী Mars Exploration
Rover ম ল েহর মানিটেত পা রােখ যার কে াল িসে ম থেক কের পৃিথবীর অিধকাংশ কনজুমার
ইেলক িন - (ক াবল সট-টব ব , িভিসআর, টা ার, িপিডএ, াটেফান) ৯৭% এ া াইজ ড টপ ৮৯%
ড টপ অব ইউএসএ, ৩ িবিলওন মাবাইল ফান, ৫ িবিলওন জাভা কাড, ১২৫ িমিলওন িটিভ িডভাইস, ১০০%
ু - র িড য়ার … এই িল ল া হেতই থাকেব) জাভা রান কের।
সান মাই ািসে ম- মূলত হাডওয় ার ক ািন। ১৯৭২ থেক ১৯৯১ সােল কি উটােরর হাডওয় ােরর এক
রভু েলশান হয়। ত এবং উ মতা স হাডওয় ার অ দােম পাওয়া যাে এবং সই সােথ কমে
সফটওয় ােরর চািহদা তই বেড় যাে । ১৯৭২ Dennis Ritchie িস া ািমং ল াং েয়জ ডেভলপ কেরন যা
া ামারেদর মেধ সব থেক জনি য়। িক ততিদেন া ামারেদর কােছ িস -এর াকচাড া ািমং িকছু টা
াি কর মেন হেত কেরেছ। এর ফল িতেত Bjarne Stroustrup 1979 সােল ডেভলপ কের িস াস াস যা
িকনা িস এর এনহা েম । এিট সােথ অবেজ ওিরেয়ে ড া ািমং ধারণােক পিরিচত কের তুেল। অবেজ
ওিরেয়ে ড া ািমং এর সুিবেধ হে া ামার পুনব বহারেযাগ (reusable) কাড িলখেত পাের যা িকনা পের অন
কােজ পুনরায় ব বহার করা যায়।
উপ মিণকা 5
বাংলায় জাভা
১৯৯০ সাল। সান মাই ািসে ম -এ িস াস াস এর আিধপেত িস- ত লখা টুল এবং এিপআই েলা ায়
অবসু েলট হেত কেরেছ। Patrick Naughton,ইি িনয়ার অব সান মাই ািসে ম, মাটামুিট হতাশ এবং এক
ধরেণর অকওয় াড পিরি িতর ীকার। ততিদেন ি ভ জব অ াপল কি উটার থেক িবতািড়ত হেয় NeXT
Computer, Inc িত া কের ফেলেছন( যা িকনা সফটওয় ার ই াি েত ব িবক পিরবতন আনেত যাে এবং যার
ফল িতেত তির হেয়েছ আজেকর ম াক-ওস) এবং NeXTSTEP নােম একিট অপােরিটং িসে ম তির কেরন।
এেত িকছু অসাধারণ ব াপার িছল যার মেধ অবেজ ওিরেয়ে ড এি ক শান লয়ার এর ধারণািট িছল অসাধারণ
যােত িকনা অবেজ ধের ধের কা মাইজড সফটওয় ার তির কের ফলা যায়। Patrick Naughton ইিতমেধ
NeXT এর িদেক যাওয়ার জন মনি র কের ফেলেছন িক তখন একবার তােক শষ সুেযাগ িহেসেব একিট অিত
গাপন েজে র অনুেমাদন দওয়া হয় যার কথা কউ জানেতা না। িকছু িদন পেরই তার সােথ যু হয় James
Gosling এবং Mike Sheridan । তখন এর নাম দওয়া হয় ি ন েজ । সমেয়র সােথ ি ন েজ এর দে া ম
হয় এবং তারা কি উটার ছাড়াও িবিভ িডভাইস িনেয় নাচার করেত থােক।
এর মেধ ১৩ জন াফ এই ি ন িটম ক ািলেফািনয়ার মনেলা পােকর স িহল রাড এর একিট ছা অিফেস কাজ
করেত থােক। তােদর ধান উে শ িস াস াস এর একিট ভাল ভাসন তির করা যা িকনা হেব অেনক তগামী
এবং র ি ভ। সই সমেয় কি উটার ছাড়াও কনজুমার ইেলক িন যমন -িপিডএ, Cable-Set Top Box
ইত ািদর চািহদা বেড় গেছ। একদল ইি িনয়ার এক সােথ থাকেল যা হয়, তারা নানারকম িজিনস িনেয় িচ া করেত
থােক, নানা রকম আইিডয়া তির হয়, তা থেক ােটাটাইপ তির করেত থােক। এর মেধ জমস গসিলং তার িস
াস াস এনহা েম চািলেয় যেত থােকন। িতিন এর নাম দন িস াস াস াস াস মাইনাস মাইনাস (C++ ++ - -
) । এখােন বাড়িত ++ মােন হে নতুন িজিনস যাগ করা এবং - - মােন হে িকছু িজিনস ফেল দওয়া। জমস
গসিলং এর জানালা িদেয় একিট ওক গাছ দখা যায়। একিদন িতিন অিফস থেক বর হেয় ঐ গাছিটর িনেচ দাড়ান
এবং সােথ সােথ C++ ++ - - নাম পিরবতন করার িস া নন এবং নতুন নাম দন ওক।
এর মেধ ইি য়াররা িমেল এে েডড িসে ম িনেয় নাচার করেত থাকা অব ায় নানা রকম সমস ার স ুখীন হন।
এে েডড িসে ম এ মমির কম থােক, েসিসং পাওয়ার ও কম থােক। এই িসে েম িস++ (যা িকনা কি উটার এর
মেতা বড় ু িটি ে র হাডওয় ােরর জেন িডজাইন করা) চালােত িগেয় তারা অ ু ত অ ু ত সমস ার স ুখীন হেত
থােক। এইসব সমস ার সমাধান করার জেন ি ন িটম নানা রকম িচ া ভাবনা করেত থােক। এই সমেয় মানুষ িপিডএ,
Cable-Set Top Box েলার মরণদশা দখেত কের। কারণ যিদও ওক িনেয় যেথ এিগেয়েছ িক এিট
কানভােবই এেদরেক সাহায করেত পারিছল না। একমা একিট অেলৗিকক ঘটনায় পাের এই েজ সফল করেত।
িঠক তখিন সই তীি ত ত াশা আেলার মুখ দেখ। জমস জমস গসিলং আউট অব দ া ব একটা যুগা কারী
ধারণা িনেয় আেস। সিট হেলা ভাচুয়াল মিশন। অথাৎ আমরা একিটা কা িনক মিশেনর জেন কাড িলখেবা যা
িকনা ক াইল হেয় একিট অ বতীকালীন কাড তির করেব। এবং জাভা ভাচুয়াল মিশন সই অ বতীকালীন
কাডেক রান টাইম-এ িরেয়ল িডভাইেসর জেন েয়াজন অনুযায়ী মিশন কাড তির করেব।
িঠক সই সমেয়ই National Center for Supercomputing Applications (NCSA) একিট কমািশয়াল ওেয়ব
াউজার বর কের এবং তােদর িটম ই ারেনট এর ভিবষ ৎ িনেয় ভাবেত কের। তারা একিট নতুন ধারণা িনেয়
আেস সিট হেলা, একধরেণর ছা া াম যা িকনা াউজার এর মেধ চলেব - এর নাম দয় অ াপেলট। অ াপেলট
ধারণা থেক তারা িঠক কের অ াপেলট এর জেন িকছু াডাড – এিট হেত হেব ছা , খুব িস ল, এর াডাড
এিপআই থাকেত হেব, এিট হেব াটফম ইি েপে , এবং আউট-অব-দ া ব নটওয়ািকং া ািমং করা যােব।
তারা তখনকার সমেয়র ই ারেনট বুমেক উে শ কের ন ট জনােরশান াডা ডেভলপ করেত চেয়িছল। এই
েজ এর কাটুন নাম িছল Duke ( যা িকনা এখন জাভা-এর মা ট িহেসেব িচিন)। িক সমস া হে এর কানিটই
িঠক মেতা িস++ িদেয় করা যাি ল না। সুতরাং পরবতীেত তারা িস া নয় য এমেবেডড িসে েমর সমস ার
সমাধানিট তারা ওেয়ব াউজার এর ে ও ব বহার করেব । সই সমেয় মানুষ ওেয়ব াউজার এর ধুমা ািটক
উপ মিণকা 6
বাংলায় জাভা
পইজ এ ট ট আর ইেমজ ছাড়া িকছু দখেত পত না। এই টকেনালিজ ব বহার করায় াউজার এিনেমশান থেক
কের ই ােরকিটভ অ াপেলট সকেলর নজর কােড় যা িকনা জাভা া ািমং ল াং েয়জ এর সফলতার মূল
কারণ।
জমস গসিলং এর এই ভাচুয়াল মিশন-এর সলু শান িছল সিত কার অেথই যুগা কারী এবং Û Æ Û½Ì এর িরিলজ
িদেত ত। িক তখন-ই নতুন ঝােমলার সূচনা হয়, lawyers এেস তােদর জানায় এর নাম Oak দওয়া যােব না,
কারণ এিট ইিতমেধ ই Oak Technologies এর ড মাক। সুতরাং নাম পিরবতন করেত হেব। হয় ইন িমং
। িক কান ভােবই একিট ভাল নাম িনবাচন করা যাি ল না। অেনেকই অেনক ধরেণর নাম উপ াপন কের, যমন -
DNA, Silk , Ruby, yuck, Silk, Lyric, Pepper, NetProse, Neon, Java ইত ািদ ইত ািদ। এর সব েলা
িলগাল িডপাটেম এ সাবিমট করার পর মা Java, DNA, and Silk এই িতনিট নাম িফের আেস যা িকনা ি ন।
নাম িনেয় ঘ ার পর ঘ ার িমিটং চলেত থােক। এর মেধ Chris Warth েপাজ কের Java, কারণ তখন তার হােত
িছল এক কাপ গরম Peet's Java (কিফ)। শষ পয নাম িঠক করা হয় Java কারণ একমা এই নােমই সব থেক
পিজিটভ িরএকশান পাওয়া যাি ল।
এর পেরর ইিতহাস আমরা সবাই জািন। জাভা হে এই েহর সবেচেয় সফল া ািমং ভাষা।
উপ মিণকা 7
বাংলায় জাভা
তামার থম জাভা া াম
আমরা এই চ া ার এ য য িবষয় েলা দখেবা স েলা হেলা-
া ািমং ল াং েয়জ িক ?
া ািমং ল াং েয়জ হে এক ধরেণর কৃি ম ভাষা যা িকনা য িবেশষ কের কি উটার-এর আচরণ িনয় ণ করার
জেন ব বহার করা হয়। মানুেষর ভাষার মেতা এর িকছু িসনট া এবং সম াি স অথাৎ িনয়মকানুন ও অথ থােক।
আমােদর এই বই এর উে শ হে একিট িবেশষ ভাষার(জাভা) িনয়মকানুন েলা জেন নওয়া। সুতরাং পড়েত
থাকুন।
কন জাভা?
পৃিথবীেত এখন পয অেনক েলা া ািমং ভাষা তির করা হেয়েছ। এেদর েত কিটর উে শ িভ িভ ।
http://en.wikipedia.org/wiki/List_of_programming_languages এখােন একিট া ািমং ল াং েয়জ এর
একিট িল দওয়া আেছ- দেখ নওয়া যেত পাের। েত কিট ল াং েয়জ এর িকছু সুিবধা অসুিবধা আেছ, এবং
ল াং েয়জ েলা িতিনয়ত উ ত হে , এবং নতুন নতুন ল াং েয়জ তির হে ।
য য কারেণ জাভা শখা যেত পাের এখন স েলা িনেয় আেলাচনা করা যাক-
এিট খুব-ই (Readable)পাঠেযাগ , সহেজ বুঝা যায়। অন য কান া ািমং ব াক াউ এর া ামার খুব
সহেজই একিট জাভা-ফাইল দেখ বুঝেত পারেব আসেল কাড এ িক লখা আেছ।
িস িকংবা িস++ এ কাড করার সময় আমােদর অেনক সময়-ই িলংিকং, অপিটমাইেজশান, মমির
এেলােকশান, মমির িড-এেলােকশান, পেয় ার িডেরফােরি ং ইত ািদ নানা রকম িজিনস িনেয় ভাবেত হয়, িক
জাভার ে এ েলার কথা ভাবেতই হয় না। খুব বিশ িচ া না কের আমরা িনি তভােব জাভা ক াইলার
এর উপর সব িকছু ছেড় িদেত পাের।
জাভােত অসংখ API আেছ য েলা খুবই বল, খুব বিশ িচ াভাবনা না কেরই এেদর িনেয় খুব সহেজই কাজ
কের ফলা যায়।
জাভা -র সব িকছু ই ওেপন সাস।
জাভা ভাচুয়াল মিশন স বত সফটওয় ার- জগেত সব থেক চমৎকার সৃ ি । জাভা-এর সােথ এর আরও
অেনক েলা ল াং েয়জ যমন- িভ, ালা ইত ািদ িনেয় কাজ করা যায়।
গত ১৫ বছের চমৎকার অেনক েলা ডেভলপেম এনভায়রনেম তির হেয়েছ য েলা খুবই ইে িলেজ –
যমন- Eclipse, IntelliJ IDEA, netbeans etc. । এ েলা মাধ েম খুব আেয়েশর সােথই কাড করা যায়,
িডবাগ করা যায়।
এিট একিট অবেজ ওিরেয়ে ড- টাইপ সইফ া ািমং ল াং েয়জ।
এিট পােটবল য কান াটফেম চেল। একবার কাড িলেখ সিট য কান মিশেন( উইে াজ , িলনা , ম াক)
চালােনা যায়।
অেনক বড় কিমউিনিট সােপাট- সারা দুিনয়ােত িমিলয়নস অব জাভা া ামার ছিড়েয় িছিটেয় আেছ।
এিটর পারফরেম িনেয় বলা চেল কান সে হ নই।
ই াি েডড, বড় বড় এ ার াইজ অ াপ েলা সাধারণত জাভা িদেয় লখা হয়।
এিট পৃিথবীেত ি তীয় জনি য় ল াং েয়জ-
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
জাভা কাডেক ক াইল করেল সিট একিট অ বতীকালীন ল াং েয়জ এ পা িরত হয়। এিট িঠক িহউম ান
িরডএবল না আবার মিশন িরডএবল ও না। এেক আমরা বিল বাইট কাড। এই বাইটেকাড ধুমা জাভা ভাচুয়াল
মিশন(JVM) বুঝেত পাের। JVM বাইট কাড ক ই ারে ট কের মিশন ল াং েয়জ এ পা িরত কের। এর জেন
JVM জা ইন টাইম(JIT) ক াইলার ব বহার কের। সুতরাং দখা যাে , জাভা কাডেক থেম ক াইল করা হয়,
তারপর সই আউটপুট ক ই ারে ট করা হয়। এে ে হেত পাের, জাভা আসেল িক? ক াই ল াং েয়জ
নািক ই ারে েটড ল াং েয়জ? উ র হে জাভা এিক সােথ দুেটাই।
১. বাইট কাড – এিট হে এক ধরেণর ই াকশান সট- যা িকনা ধুমা জাভা ভাচুয়াল মিশন বুঝেত পাের। জাভা
কাড ( িহউম ান িরডএবল) অথাৎ আমরা য কাড েলা িলখেবা স েলা ক জাভা ক াইলার ারা ক াইল
করেল বাইটেকাড তির হয়। এই বাইটেকাড েলা .class এ েটনশন যু বাইনারী ফাইেল ার করা হয়।
২. জাভা ভাচুয়াল মিশন(JVM) - এিট মূলত একটা বা ব মিশেনর ভতর একটা কা িনক মিশন। সহজ কথায়-
এিট একিট স টওয় ার যা িকনা বাইট কাড পেড় স েলা মিশন এি িকউেটবল কাড-এ পা িরত করেত পাের।
JVM অেনক লা মিশেনর জেন লখা হেয়েছ- অথাৎ এিট উইে াজ, ম াক OS, িলনা , আইিবএম
mainframes, সালািরস ইত ািদ অপােরিটং িসে েমর জেন আলাদা আলাদা কের লখা হেয়েছ। এর ফেল, আমরা
যিদ একবার কান জাভা া াম িলিখ, সিট যেকান মিশেন চালােনা যােব। এর কারণ আমরা এখন কান িনিদ
মিশনেক উে শ না কের ধু মা JVM ক উে শ কের কাড িলিখ । যেহতু সব মিশেনর জেন ই JVM আেছ,
সুতরাং আমােদর কাড সব মিশেনই চলেব। আর এভােবই - “Write once, run anywhere” বা WORA
স ব হেয়েছ।
৩. জা ইন টাইম( JIT) ক াইলার – এিট মূলত JVM এর একিট অংশ। আমরা য জাভা কাড ক াইল করার
সময় তির কির স েলা মূলত JIT ক াইলার েসস কের। এেক dynamic translator ও বলা যায়- কারণ এিট
রানটাইম-এ অথাৎ া াম চলাকািলন সমেয় বাইটেকাড েসস কের।
জাভা রানটাইম এনভায়রনেম (JRE) –এিট মূলত একিট জাভা া াম রান করার জেন অ ত:পে য সব
কে ােন লােগ তার একিট প ােকজ। এর মেধ থােক JVM এবং িকছু া াড এিপআই।
জাভা ডেভলপার িকট (JDK) – এিট হে JRE এবং জাভা কাড লখার জেন য সব টুল েলা লােগ তার
একিট সট। জাভা া াম লখার জন ধু মা JDK থাকেলই চেল কারণ এর মােঝই সব িকছু দয়া থােক।
ড টপ এবং া -অ েলান সাভার এি েকশান তির করার জেন য সব টুল এবং এিপআই দরকার হয়
স েলােক আলাদা কের এর নাম দওয়া হেয়েছ জাভা া াড এিডশন।
জাভা এ ার াইস এিডশন (JEE) – এিট JSE এর উপর তির ওেয়ব এবং অেনক বড় মােপর এ ার াইজ
এি েকশান তির করার জেন য সব কে ােন দরকার হয় স েলােক আলাদা কের এর নাম দওয়া হেয়েছ জাভা
এ ার াইস এিডশন- উদারহরণস প এর কে ােন েলা হে -
Servlets
Java Server Pages (JSP)
Java Server Faces (JSF)
Enterprise Java Beans (EJB)
Two-phase commit transactions
Java Message Service message queue API's (JMS)
etc.
এিট মূলত জাভা া াড এিডশন এর সংি এিডশন। ই ারেনট অব িথংস, এমেবড িডভাইস, মাবাইল
িডভাইস, মাইে াকে ালার, স র, গটওেয়, মাবাইল ফান, ব ি গত িডিজটাল সহায়ক (িপিডএ), িটিভ
সট টপ ব , ি ার ইত ািদ জেন তির জাভার এই সংি এিডশন ক বলা য় - জাভা মাইে া এিডশন ।
িলনা মিশেন জাভা ইন ল করেত িনেচর ধাপ েলা apply করেত হেব-
ধাপ ২: এরপর টািমনাল থেক যখােন জাভা ডাউনেলাড হেয়েছ সখােন যান-
cd ~/Download
ধাপ ৭: এবার পরী া কের দখা যাক জাভা ইন ল হেয়েছ িকনা। আবার টািমনাল ওেপন ক ন এবং িনেচর
লাইনিট টাইপ ক ন।
java -version
যিদ সবিকছু িঠকঠাক থােক তাহেল আপিন িনেচর তথ েলা দখেত পারেবন-
আর উইে াজ মিশেনর ে এিট আেরা সহজ। এর জেন ধুমা JDK িট ডাউনেলাড কের ডাবল-ি ক কেরই
এিট ইন ল করা যােব।
IDE-
১. Eclipse - https://www.eclipse.org/downloads/
package bd.com.howtocode.java.helloworld;
পাঠ ২: িসনট া
প ােকজ িডে য়ােরশান
ইে াট
াস
িফ স
মথডস
ক াকটরস
কেম স
এই চ া াের আিম একিট জাভা া াম এর মৗিলক িকছু ওভারিভউ দয়ার চ া করেবা। তেব েত সুিবধােথ
আমােদর িকছু টামস স েক জেন নওয়া জ ির।
অবেজ
যেহতু জাভা একিট অবেজ ওিরেয়ে ড ল াং েয়জ, সুতরাং েত জানেত হেব অবেজ িক। অবেজ এর
মােন আমারা যা জািন, সটা হে আমােদর জড়জগেতর কান ব , যােক িঠক শ করা যায়। তেব যেহতু আমরা
ক না করেত পাির, আমরা অেনক িকছু ধের িনেত পাির, মেন ক ন - একিট বাইসাইেকল। বাইসাইেকল বলেতই
আমেদর মাথায় একিট িচ চেল আেস। আমরা এর বিশ েলা জািন, যমন এিটর দুইিট চাকা থােক, একিট বসার
িসট থােক, এর ক আেছ। তারপর এও জািন য এিট িক কের, অথাৎ সাইেকল এর কাজ েলাও আমরা জািন-
যমন এিট চেল। দখা যাে য আমরা একিট বাইসাইেকল এর অব া ও আচরণ স েক জািন। এই অব া ও
আচরণ েলা িনেয়ই বাইসাইেকল একিট অবেজ ।
আমরা যিদ আমােদর ক নাটুকু আেরকটু বািড়েয় িনেয় বিল, সাইেকল হে একিট সফটওয় ার কে ােন যা িকনা
কি উটাের চেল, আমার মেন হয় কােরা আপি থাকার কথা নয়।
যেহতু আমারা া ািমং িনেয় আেলাচনা করিছ, সুতরাং এভােব বিল, আমরা যিদ একটা া াম িলিখ, সই
া ােমর ছা একিট অংশ যার আমােদর এই বাইসাইেকল এর মেতা বিশ থােক, এবং একিট িকছু কাজ স াদন
করেত পাের, তাহেল সই ছা অংশিটেক অবেজ বলেত পাির।
াস
মেন কির আমরা একটা বািড় বানােত চাই। থেম আমরা িচ া কির বািড়টা আসেল িকভােব বানােবা। আমরা জায়গা
িনবাচন কির। তারপর িচ া কির বািড়িট কত-তলা হেব, কয়টা এপাটেম হেব, এপাটেম েলা কত য়ারিফেটর
হেব। তারপর িচ া কির, একটা এপাটেম এ কয়িট ম হেব, িয়ং েমর দঘ কত হেব, কয়টা বাথ থাকেব,
বলকিন কাথায় থাকেব, রা া ঘর কাথায় হেব ইত ািদ ইত ািদ। আ া এ েলা িঠক হেয় গল, এখন আমরা িচ া
করেবা আরও জিটল কাজ িনেয়। ওয় ািরং িনেয়, েত ক েম কয়টা পেয় থাকেব, পািনর লাইন িকভােব নব।
তারপের বাথ েম িক ধরেণর টাইল ব বহার করেবা, াের কান েলা।
অথাৎ বািড়িট বানােনার আেগই আমরা সব িকছু িনধারণ কের ফলিছ এবং আমরা এই িবষয় েলা সব িলিপব কের
রািখ। তারপর এই িলিপব লখা েলােক নানাভােব পরী া কের স চক কের চূড়া কির। এর একিট গলাভরা
নাম আেছ, সটা হে - blueprint.
পাঠ ২: িসনট া 13
বাংলায় জাভা
আমােদর এে বাড়িট হে অবেজ । এই অবেজ বানােনার আেগ আমােদর blueprint এর দরকার হয়। আর এই
blueprint কই আমরা বিল াস।
আমরা তাহেল এখন অবেজ এবং াস এর ধারণা জািন। এবার তাহেল আমােদর মূল িবষয় িসনট িনেয় কথা বিল-
আমরা যারা িস িকংবা অন কান া ািমং ল াং েয়জ আেগ থেকই জািন, একিট া ােম দুিট িজিনস অবশ ই
কমন থােক - স েলা হেলা - ফাংশান এবং ডটা ।
একিট জাভা া াম িলখেত হেল আমােদরেক অবশ এই একিট ফাইল তির করেত হেব যার এ েটনশন হেব .java.
উদাহরণস প- HelloWorld.java এবার আমরা ল কির একিট জাভা া ােম িক িক থােক-
প ােকজ িড ােরশন
ইে াট টেম স
টাইপ িড ােরশন
িফ স
মথডস
উপেরর নাম েলা িনেয় লাগেল সমস া নই, এ িণ স েলা িনেয় আেলাচনা করিছ, তেব তার আেগ একিট
জাভা া াম দেখ িনই।
package bd.com.howtocode.java.tutotorial.syntax;
import java.util.HashMap;
এই কাডিটর েতই আেছ প ােকজ িড ােরশন। আমরা আমােদর কি উটাের নানা ধরেণর ফাইল িবিভ ফা াের
সািজেয় রািখ। যমন- মুিভ ফা াের হয়েতা আমরা ধুই মুিভ রািখ, সখােন অন ফাইল রািখ না। আবার মুিভ
ফা াের এর মেধ আেরা সাব- ফা ার তির কির আেরা আলাদা করার জেন , যমন – বাংলা মুিভ, ইংেরিজ মুিভ
ইত ািদ। জাভােত প ােকজ বলেত এই ধারণিটই বুঝায়। একিট জাভা া ািমং ভাষায় লখা স টওয় ার এ শত শত
বা হাজার হাজার পৃথক াস থাকেত পাের। এজেন প ােকজ িড ােরশন এর মাধ েম আমরা এিক রকম াস েলা
একিট প ােকেজর মেধ আলাদা কের রািখ।
পাঠ ২: িসনট া 14
বাংলায় জাভা
কা ািন েলা তােদর ই ারেনট ডােমইন নইম ক উে া কের তােদর প ােকেজর নাম িলেখ। যমন -
example.com এর একিট া ামার একিট প ােকেজর নাম িলখেব এইভােব- com.example.package.
আমােদর ে -
পাঠ ২: িসনট া 15
বাংলায় জাভা
package bd.com.howtocode.java.tutotorial.syntax;
তারপর আমােদর া ােমর ি তীয় লাইনিট হেলা - ইে াট টেম স। অন কান প ােকেজর াস যিদ আমােদর
া ােম দরকার হয় তাহেল আমারা সিটেক এভােব ইে াট করেত পাির। এিট িস া ািমং এর ইন ু ড টেম স
এর মেতা।
import java.util.HashMap;
এর পেরর লাইনিট হেলা টাইপ িড ােরশন। জাভােত একিট টাইপ একটা াস অথবা ই ারেফইস অথবা এনাম হেত
পাের(ই ারেফইস এবং এনাম িনেয় পের আেলাচনা করা হেব)। াস ে েত class িকওয়াড িলেখেত হয়
তারপর কািল স { এবং শষ } করেত হয়। আমােদর পরবিত িতটা লাইন কাড এই কািল স { } এর
ভতের িলখেত হেব।
এখােন অিতির একিট public িকওয়াড দখা যাে । এই মু েত ধু মেন রাখুন াস এর েত এিট িলখেত হয়।
পের এিট িনেয় আেলাচনা করা হেব।
এর পেরই আমরা যা দখিছ তােক বলা হয় িফ িড ােরশন। অথাৎ আমরা য িবিভ রকম ভ ািরয়বল িড ার কির,
স েলা।
এবং এর পেরই থােক মথড। িস িকংবা অন ান া ািমং ল াং েয়জ এ যােক আমরা ফাংশন িকংবা সাব িটন বেল
থােক, এখােন আমরা স েলােক মথড বিল।
এে ে আমােদর মথড হে -
এিট হে মইন মথড। জাভা া ামেক রান করেত হেল অবশ ই কান ােস একিট মইন মথড থাকেত হেব।
এবার আমরা িকছু িজিনস ি করার চ া কির-
জাভােত কনসেল িকছু ি করার জেন System.out.println() অথবা System.out.print() ব বহার করা হয়।
পাঠ ২: িসনট া 16
বাংলায় জাভা
package bd.com.howtocode.java.tutotorial.syntax;
Hello, world!
Hello, world!Hello,
world!Hello, world!
আমরা ইিতমেধ জািন াস িক- তাহেল এবার একিট াস িলেখ ফলা যাক-
পাঠ ২: িসনট া 17
বাংলায় জাভা
package bd.com.howtocode.java.tutotorial.syntax;
/**
* @author Bazlur Rahman Rokon
* @since 9/20/14.
*/
public class Bicycle {
int cadence = 0;
int speed = 0;
int gear = 1;
void printStates() {
System.out.println("cadence:" +
cadence + " speed:" +
speed + " gear:" + gear);
}
}
আমরা াস এবং অবেজ িক জািন, িক িকভােব াস থেক অবেজ তির করেত হয় সিট এবার দখা যাক-
পাঠ ২: িসনট া 18
বাংলায় জাভা
package bd.com.howtocode.java.tutotorial.syntax;
/**
* @author Bazlur Rahman Rokon
* @since 9/20/14.
*/
// Invoke methods on
// those objects
bike1.changeCadence(50);
bike1.speedUp(10);
bike1.changeGear(2);
bike1.printStates();
bike2.changeCadence(50);
bike2.speedUp(10);
bike2.changeGear(2);
bike2.changeCadence(40);
bike2.speedUp(10);
bike2.changeGear(3);
bike2.printStates();
}
}
আমরা জািন য জাভা া াম চালু করেত হেল একিট মইন মথড দরকার হয়। উপেরর া ামিটেত একিট মইন
মথড আেছ। এবং এর ভতের েত আমরা দুইিট অবেজ তির কেরিছ।
জাভােত অবজ তির করা খুব সহজ। এর জেন আমােদর িতনিট প দরকার হয়-
িড ােরশন
ইনসেটনিশেয়শান
ইিনিশয়ালাইেজশান
পাঠ ২: িসনট া 19
বাংলায় জাভা
এখােন িড ােরশন টাইপ িড ােরশন এর মেতাই। ভ ািরয়বল চ া াের আমরা আেরা িডেটইলস দখেবা।
তারপর অবেজ িট ধের ডট অপােরটর ব বহার কের সই ােসর মথড েলা কল করা হয়েছ। এই া ামিট রান
করেল আউটপুট আসেব-
কন াকটর
কন াকটর অন ান মথড বা ফাংশেনর মতই একিট মথড বা ফাংশেন। তেব এিটর কান িরটান টাইপ নই। একিট
াসেক একিট অবেজ -এ তির করেত য েয়াজনীয় কাজ েলা করেত হয়, কন াকটর সই কাজ েলা কের
থােক। তেব মজার ব পার হে সই েয়াজনীয় কাজ েলা জেন আমােদর কাড িলখেত হয় না।
আমােদর উপেরর াসিটেত আমরা কান কন াকটর িলিখ িন। তাহেল এর অবেজ তির হেলা িকভােব? উ রিট
হে আমরা যিদ কান কন াকটর না িলিখ তাহেল জাভা ক াইলার িনেজ থেকই একিট কন াকটর িলেখ
ক াইল কের, যােক আমরা বিল িডফ কন াকটর। তেব আমরা চাইেল িনেজর একিট িলখেত পাির।
public Bicycle() {
}
}
Comment | Description
/* text */ | ºÚËÚ ³ ÈÚ¦ÑÚÏ /* áÃá³ */ È
// text | ºÚËÚ ³ ÈÚ¦ÑÚÏ // áÃá³ ÑÚ
/** documentation */ | ¬Û½ Øá ¹ ¿³ÝáÌ ½ÚÕÚÆ ³áÌèƽ । ¬á³ doc comment ÊÑ
উদাহরণ-
পাঠ ২: িসনট া 20
বাংলায় জাভা
package bd.com.howtocode.java.tutotorial.syntax;
/**
* The HelloWorld program implements an application that
* simply displays "Hello World!" to the standard output.
*
* @author Bazlur Rahman Rokon
* @since 9/20/14.
*/
public class HelloWorld {
public static void main(String[] args) {
// Prints Hello, World! on standard output.
System.out.println("Hello, world!");
/*
for (int i = 0; i < 100; i++) {
System.out.println(i);
}*/
}
}
অনুশীলন:
* * * * * * * * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * * * *
(a) (b) (c)
পাঠ ২: িসনট া 21
বাংলায় জাভা
ভ ািরয়বল
ভ ািরয়বল হে একিট নাম যা কি উটােরর একিট মেমাির লােকশান ক িনেদশ কের। উদাহরণ-
int cadence = 0;
একিট ভ ািরয়বল িড ােরশন এর জেন একিট ডাটাটাইপ দরকার হয়, অথাৎ ভ ািরয়বল িট িক ধরেণর ডাটা হা
করেত তা বেল িদেত হেব। উপেরর উদাহরণিটেত আমরা একিটভ ািরয়বল িড ার কেরিছ যার নাম cadence এবং
এিট ইি জার টাইপ ডাটা হা কের।
যেহতু জাভা একিট ািটক ািল টাইপড ল াং েয়জ সুতরাং ভ ািরয়বল িড ােরশন এর সময় ডাটাটাইপ উ্ে খ
করা অত াবশ ক।
জাভােত ভ ািরয়বল এবং িফ দুই শ ই ব বহার করা হয়, তেব এর িকছু টকিনকাল পাথক আেছ। স েলা িনেয়ই
আেলাচনা করা হেব –
int cadence = 0;
int speed = 0;
int gear = 1;
public Bicycle() {
}
void printStates() {
System.out.println("cadence:" +
cadence + " speed:" +
speed + " gear:" + gear);
}
}
আমরা জািন য একিট াস থেক আমরা অবেজ তির কির। আমরা একটা াস থেক অেনক েলা অবেজ তির
করেত পাির। এবং েত ক অবেজ -ই আলাদা আলাদা। যমন -
এখন bike1 এবং bike2 ত িকছু ভ ািরয়বল েলাও আলাদা। অথাৎ আমরা যত েলা অেজ তির করেতবা িঠক
তেতা েলা আলাদা ভ ািরয়বল থাকেব মেমািরেত। এে ে মেমািরেত ২টা cadence থাকেব, ২টা gear থাকেব
এবং ২ speed ধাকেব।
এই ভ ািরয়বল েলােক Instance Variables বা Non-static fields বলা হয়। এই ভ ািরয়বল েলা আেগ
static িকওয়াডিট থােক না।
উপেরর উদাহরণিটেত numGears নােম একিট ভ ািরয়বল আেছ, এিটর আেগ একিট static িকওয়াডিট আেছ।
এ ধরেণর ভ ািরয়বল ক Class Variables বা Static Fields বলা হয়। static িকওয়াডিট ক াইলারেক বেল য
numGears নােম একিট মা ভ ািরয়বল থাকেব মেমািরেত, অবেজ এর সংখ া যতই হাক।
লাকাল ভ ািরয়বল হেলা সসব ভ ািরয়বল য েলা কান মথেডর মােঝ িড ার করা হয়। একিট লাকাল
ভ ািরয়বল ধু মা সই মথেডর ভতর থেকই একেসস করা যােব।
আর Parameters variables হেলা সই ভ ািরয়বল েলা য েলা মথড কল করার সময় পাস করা হয়। এ
েলাও ধুমা মথেডর ভতর থেকই একেসস করা যায়।
byte myByte;
short myShort;
char myChar;
int myInt;
long myLong;
float myFloat;
double myDouble;
েত আেগ টাইপ িলখেত হেব, তারপর একিট নাম, তারপর সিমেকালন িদেয় শষ করেত হেব। তেব আমরা চাইেল
ভ ািরয়বল ক ইিনিশয়ালাইেজশান করেত পাির। যমন -
int cadence = 0;
এরপর যিদ আমরা কান ভ ািরয়বেল ভ ালু এসাইন করেত চাই তাহেল -
myByte = 127;
myFloat = 199.99;
ডাটা টাইপ
Data
Description
type
এ েলা িমিটভ , এর মােন হে এ েলা অবেজ নয়। এরা মেমািরেত সরাসির ভ ালু রােখ।
রপার াস
Data
Description
type
Byte 8 bit signed value, values from -128 to 127
Short 16 bit signed value, values from -32.768 to 32.767
Character 16 bit Unicode character
Integer 32 bit signed value, values from -2.147.483.648 to 2.147.483.647
এ েলােক ি িমিটভ টাইপ এর রপার রপার াস বলা হয়। ল ক ণ, এ েলার সব েলার নাম ক ািপটাল অ র
িদেয় হেয়েছ।
তেব আমরা চাইেল অবেজ ডাটাটাইপ এবং ি মিটভ ডাটাটাইপ এেক অপেরর পিরপূরক িহসােব ব বহার করেত
পাির।
Integer a;
int b = 9;
a = b;
তেব ি িমিটভ ভ ালু েলা িডফ ভ ালু থােক। অথাৎ আমরা যিদ ভ ালু এসাইন না কির, তাহেল এেদর মেধ
বাইিডফ ভ ালু থােক। যমন -
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
boolean false
িলটােরল-
া ািমং ল াং েয়জ িকছু মজার মজার িব -ইন সুিবধা থােক, তার মেধ িলটােরল একিট। আমরা জািন য একটা
ভ ািরয়বল িড ােরশান এর জন থেম টাইপ িলখেত হয়, তারপর একটা নাম িদেত হয়, তারপর এেক
ইিনিশয়ালাইেজশান করেত হয়। ভিরেয়বলিট যিদ অবেজ হয়, তাহেল ইনেটনিশেয়শান করেত হয়।
উদাহরণ-
or
Int x = 5;
উপেরর দুিট উদাহরেণর মােঝ একিটেত আমরা new িকওয়াড ব বহার কের নতুন অবেজ তির কেরিছ। িক পেরর
উদাহরণিটেত সিট করেত হয় িন। আমরা সরাসির একিট ভ ালু এসাইন কেরিছ। এখােন 5 একিট ভ ালু। এখােন 5
হে িলটােরল।
এরকম অেনক ে আমরা new িকওয়াড ব বহার না কেরই ভিরেয়বল initialize করেত পাির।
ইি জার িলটােরল-
double d1 = 123.4;
// ¬Û³ ÍÚÑÝ âÊ ÚÛƳ ¨ÈÚáÎ áÑ´Ú ØáÎá¹
double d2 = 1.234e2;
float f1 = 123.4f;
ÍÚáÏ ÚÏ ¬ ¿ Û ¢ ÛѽÚáÏÑ--
char এবং String উ ৃ িত িচে র ভতের লখা হয়। char ে একক উ ৃ িত িচ String এর জেন ডবল
উ ৃ িত িচ ব বহার করেত হয়- যমন-
আমরা জািন িকভােব ভিরেয়বল ইিনিশয়ালাইজ করেত হয় জািন, এবার তাহেল এই ভ ািরয়বল েলা িদেয় িক কাজ
করা যায় স েলা দিখ।
কান কাজ করেত হেল একজন কাযকারী বা অপােরটর লােগ। অপােরটর িকছু অপাের িনেয় কাজ কের থােক
তারপর ফলাফল িরটান কের। জাভা া ািমং ল াং েয়জ এ বশ িকছু অপােরটর আেছ- স েলা দখা যাক-
“=” এিট হে এসাইনেম অপােরটর বাংলায় যােক বেল সমান সমান িচ । আমরা একিট Bicycle াস দেখিছ,
এর মােঝ িকছু ভিরেয়বল দেখিছ-
int cadence = 0;
int speed = 0;
int gear = 1;
এই ভ ািরয়বল েলার ডান পােশ সমান সমান িচে র পর আমরা একটা ভ ালু বা মান বিসেয়িছ। এভােব আমরা
একিট ভ ািরয়বল এর মােঝ ভ ালু এসাইন করেত পাির।
জাভা া ািমং ল াং েয়জ-এ যাগ, িবেয়াগ, ন, ভাগ করার জেন িকছু অপােরটর আেছ। এ েলা আমরা যখন
বিসক গিণত িশিখ তখন থেকই জািন। ধু একিট অপােরটর নতুন মেন হেত পাের, যা হেলা “%”। এিটেক
অেনেকই পারেসে জ বা শতকরা িচ িহেসেব ভুল করেত পাের, িক এিট আসেল তা নয় । এিট মূলত একিট
সংখ ােক আেরকিট সংখ া ারা ভাগ কের ভাগেশষ িরটান কের।
অপােরটর এর কাজ
+ আিডিটভ(Additive) অপােরটর, যা দুিট সংখ া বা ি ং যাগ করার জেন ব বহার করা হয়।
সাব াকশান (Subtraction) অপেরটর যা একিট সংখ া থেক আেরকিট সংখ া িবেয়াগ করার
-
জেন ব বহার করা হয়।
* মাি ি েকশান (Multiplication)অপােরটর যা দুিট সংখ ােক ন কের।
/ িডিভশান(Division) অপােরটর , যা িদেয় একিট সংখ ােক আেরকিট সংখ ােক ভাগ করা যায়।
িরমাই ার (Remainder) অপােরটর যা একিট সংখ ােক আেরকিট সংখ া ারা ভাগ কের
%
ভাগেশষ িরটান কের।
class ArithmeticDemo {
int result = 1 + 2;
// ¬´ÚáÆ result ¬Ï ÌÚÆ Øá ¹ 3
System.out.println("1 + 2 = " + result);
int original_result = result;
result = result - 1;
//¬´ÚáÆ result áÃá³ ò ×ÚÊ Ú ³ÏÚÎ ¬Ï ÌÚÆ ó
System.out.println(original_result + " - 1 = " + result);
original_result = result;
result = result * 2;
// ¬´ÚáÆ result ¬Ï ×Úáà ó ÌÚÛ ½ ÑÚ¦ ³ÏÚÏ ÉáÑ ¬Ï ÌÚÆ 4
System.out.println(original_result + " * 2 = " + result);
original_result = result;
result = result / 2;
//¥ÊÚÏ result Û¿ËÚ¦¿ ³ÏÚÏ ÉáÑ ¬Ï ÌÚÆ ØáÎ áµÑ 2
System.out.println(original_result + " / 2 = " + result);
original_result = result;
result = result + 8;
// ù áÍÚµ ³ÏÚÏ ÉáÑ ¬Ï result ØáÑÚ 10
System.out.println(original_result + " + 8 = " + result);
original_result = result;
result = result % 7;
// result ¬Ï ×Úáà ø ÛÏÌÚ¦ ¿ÚÏ ¤ÈÚáÏ½Ï ÍÊØÚÏ ³ÏÚÏ ÉáÑ ¬Ï ÌÚÆ ØáÎ áµÑ 3, ³ÚÏÁ ¬Û½ ÕÝÅÝ ÌÚ ÛÏÌÚƦ ¿ÚÏ
System.out.println(original_result + " % 7 = " + result);
}
}
1 + 2 = 3
3 - 1 = 2
2 * 2 = 4
4 / 2 = 2
2 + 8 = 10
10 % 7 = 3
উপেরর সব অপােরটর এর জেন আমােদর দুিট কের অপাের দরকার হেতা, তেব এই অপােরটর এর লােগ একিট।
এ েলা িবিভ ধরেণর কাজ কের থােক যমন – এক কের ইনি েমি ং/িডি েমি ং বা একটা এ ে শান নেগট
করা বা একটা বুিলয়ান- ক ইনভাট করা । এ েলা হল - +, -, ++, –-, ! উহাহরণ -
class UnaryDemo {
result--;
// ¬Û½ ¬³ ³áÏ Û¿Û áÌ ½ ³áÏ, ×ÝÂÏÚ¢ ¬´ÚáÆ result ¬Ï ÌÚÆ 0
System.out.println(result);
result++;
// ¬Û½° ¬³ ³áÏ ¦ÆÛ áÌ ½ ³áÏ, ×ÝÂÏÚ¢ ¬´ÚáÆ result ¬Ï ÌÚÆ ¥ÊÚÏ ò
System.out.println(result);
result = -result;
// ¬´ÚáÆ result á³ áÆáµ½ ³áÏ, ×ÝÂÏÚ¢ ¬Ï ÌÚÆ ¬´Æ -1
System.out.println(result);
ইকুয়ািলিট (Equality) এবং রশনাল(Relational) অপােরটর েলা িনধারণ কের একিট ভ ালু অন িট থেক বড় বা
ছাট িকনা।
উদাহরণ
class ComparisonDemo {
উদাহরণ-
class ConditionalDemo1 {
চলেব --
## এের (Array)
এের
এের হে একধরেণর কে ইনার অবেজ যা অেনক েলা এিকধরেণর ডাটা টাইেপর এর একিট িফ ড সাইেজর
ভ ালু ধের রাখেত পাের।
এের িড ার করার জেন থেম ডাটাটাইপ (িক ধরেণর ডাটাটাইপ রাখেব) এর সােথ ([]) য়ার ােকট তারপর এর
একিট ভিরেয়বল নাম িদেত হয়।
জাভােত দুই ধরেনর এের রেয়েছ ১/ িসে ল ডাইেমনশনাল এের ২/ মাি ডাইেমনশনাল এের
তেব য়ার ােকট ভিরেয়বল নাম এর পেরও দওয়া যেত পাের - উদহরণ-
int anArray[];
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
এের একিট অবেজ , সুতরাং এেক িনউ(new) অপােরটর িদেয় থেম ি েয়কট করেত হেব।
জাভা া ািমং ল া ুেয়েজ িজেরা বজড না ািরং( ইনেড ন থেক ) করা হেয় থােক। অথাৎ, এেরর এই
ভ ালু েলা যিদ পড়েত চাই তাহেল -
int[] anArray = {
100, 200, 300,
400, 500, 600,
700, 800, 900, 1000
};
একিট এের এর মেধ আেরকিট অ াের রাখা যেত পাের - িনেচ মাি ডাইেমনশনাল এের এর িডি য়ােরশন এবং ভ ালু
এসাইন করার একিট প িত দখােনা হল ।
সুিবধাঃ এেরেত আমরা খুব সহেজ ডটা েলােক ছাট থেক বড় - বড় থেক ছাট আকাের সািজেয় িনেত পাির ।
খুব সহেজই যেকােনা ইনেডে এে স িনেত পাির । অসুিবধাঃ এেরর সাইজ আেগ থেক বেল িদেত হয় এবং এিট
িফ ড সাইজ তাই রানটাইেম আমরা এটার সাইজ বাড়ােত পািরনা । অবশ এই সমস া দূর করেত জাভােত
কােলকশন মওয়াক ব বহার করেত পাির য েলা পযায় েম আমরা আেলাচনা করেবা ।
এ ে শান(Expressions)
একে শান হে কত েলা ভ ািরেয়বল, অপােরটর এবং মথড বা ফাংশান কল এর মাধ েম একিট আউটপুট তির
করার জেন য কাড লখা হয়। উদাহরণ-
int cadence = 0;
anArray[0] = 100;
int result = 1 + 2;
if (value1 == value2)
System.out.println("value1 == value2");
উপেরর cadence = 0 একিট এ ে শান। এিটর ”=” অপােরটেরর মাধ েম একিট ভ ালু cadence ভ ািরেয়বল এ
এসাইন হয়। তারপর anArray[0] = 100 এই এ ে শােনর মাধ েম anArray এের এর থম ঘের 100 এসাইন করা
হল।
1 + 2 একিট এ ে শান যা “+” অপােরটর এর মাধ েম দুিট সংখ া যাগ হয় এবং “=” অপােরটর এর মাধ েম result
ভ ািরেয়বল এ এসাইন হয়। সুতরাং এখােন দুইটা এ ে শান।
জাভা া ািমং ল াং েয়জ ক াউ এ ে শান সােপাট কের। এর মােন হে অেনক েলা ছাট ছাট
এ ে শান িনেয় আমরা একিট বড় এ ে শান তির করেত পাির। একিট এ ে শান মূলত একিট িনিদ ডাটাটাইপ
এর ভ ালু দান কের, সুতরাং ক াউ এ ে শান এর ে সব এ ে শান এর ফলাফল এিক ডাটাটাইপ এর
হেত হেব।
1 * 2 * 3
এখােন 1 * 2 একিট এ ে শান যার ইি জার টাইপ এর ডাটাটাইপ এর আউটপুট দান কের, এবং এিট যখন আবার
3 এর মাি াই করা হয়, তখনও এর আউটপুট ইি জার টাইপ হয়।
তেব ক াউ এ ে শান এর ে এি িগউিট দূর করার জেন স “()” ব বহার করা উ ম। উদাহরণ -
x + y / 100
এবং (x + y) / 100
তেব যিদ এ ে শান এর অডার স িদেয় না িঠক কের দওয়া হয় তেব অপােরটর এর অ গণ তা(precedence)
অনুযায়ী এ ে শান এর অডার িনধািরত হয়।
টেম স(Statements)
টেম স হে অেনকটা একটা পূণা বা সাথক বাংলা বােেক র মেতা। তেব া ািমং এর ভাষায় এিট হে -
একিট ছাট ইউিনট অব কাড যা িকনা এি িকউশান করা যায়। কত েলা এ ে শান শেষ সিমেকালন (;) িদেয়
শষ করেল টেম হেয় যায়। যমন-
এসাইনেম এ ে শান
++ অথবা-- এর ব বহার
মথড/ফাংশান কল
নতুন অবেজ তির করা, ইত ািদ ।
কস(Blocks)
একিট কারিল স “{}” এর মােঝ শূণ অথবা একািধক টেম থাকেল তােক ক বলা হয়। উদারহরণ-
class BlockDemo {
public static void main(String[] args) {
boolean condition = true;
if (condition) { //¬´ÚáÆ Ñ³ -ò ¬Ï ÕÝÏÝ
System.out.println("Condition is true.");
} // ¬´ÚáÆ Ñ³ -ò áÕÖ
else { // ¬´ÚáÆ Ñ³-ó ÕÝÏÝ
System.out.println("Condition is false.");
} // ¬´ÚáÆ Ñ³-ó áÕÖ
}
}
# পাঠ ৪: কে াল া -লুিপং- াি ং
ইফ- দন-ইলস
সুইচ
ফর লুপস
য়াইল লুপ
ডু-ইয়াইল লুপ
ক াটেম
কি িনউ াটেম
িরটান াটেম
সারসংে প
আমােদর সাসেকােড -এ যসব টেম থােক তা সাধরারণত উপর থেক িনেচ য অডার এ দওয়া থােক সই
অডােরই এি িকউট হয়। িক কে াল া টেম এই অডারেক ভে িবিভ িডিসশান মিকং, লুিপং এবং
াি ং এর মাধ েম একিট িনিদ কাড ক- ক এি িকউট কের।
কে াল া টেম িল হে -
আমরা যিদ একিট া াম এর একিট িনিদ কাড ক ধু মা একিট িবেশষ কি শান বা শত সােপেে এি িকউট
করেত চাই তাহেল আমরা if-then টেম ব বহার কির-
উদাহরণ-
int x = 10;
if( x < 20 ){
System.out.print("This is if statement");
}
if টেম এর পেরনে িসস “()” মােঝ একিট বুিলয়ান এ ে শান থােক। বুিলয়ান এ ে শান হে এক ধরেণর
এ ে শান যার ফলাফল ধুমা true অথবা false হেত পাের। এই বুিলয়ান এ ে শানিটর মান যিদ true
হয় তাহেল এই if টেম এর কিট এি িকউট হেব, নতুবা হেব না।
তেব আমােদর থম কি শান বা শত বা বুিলয়ান এ ে শান যিদ সিত না হয়, এবং এে ে আমরা অন একিট ক
অব কাড এি িকউট করেত চাই, তাহেল if-then-else টেম ব বহার কির। উদাহরণ-
পাঠ ৪: কে াল া -লুিপং- াি ং 37
বাংলায় জাভা
if( x < 20 ){
System.out.print("This is if statement");
}else{
System.out.print("This is else statement");
}
উপেরর উদাহরণিট- ত একিট কি শান বা বুিলয়ান এ ে শান িছল, িক আমােদর মােঝ মােঝ একািধক কি শান
থাকেত পাের। তাহেল আেরকিট উদাহরণ দখা যাক-
Grade = C
এখােন থম বুিলয়ান এ ে শানিট যিদ true হয, তাহেল grade = 'A'; কাড কিট এি িকউট হেব, আর
true না হয়, তাহেল পেরর কাড ক, অথাৎ else if (score >= 80) এ ে শানিট ই্ভালুেয়ট করা হেব,
এবং এিট যিদ true হয় তাহেল এর কািল স {} এর মােঝর কাড কিট এি িকউট হেব। অথাৎ আমােদর যিদ
অেনক েলা কি শান থােক তাহেল আমরা if কি শান এর সােথ else if িদেয় স েলা- ক এড করেত
পাির। এই কি শান েলার মেধ য কান একিট এ ে শান যিদ true হয় তাহেল সই ক এর কাডিট
এি িকউট হেব ।
এখােন ল রাখেত হেব য, থম এ ে শানিট যিদ true হয়, তাহেল িক বািক কি শান েলা আর ইভালুেয়ট
হেব না। অথাৎ রান টাইেম এই কাড ক েলা একদম থম if কি শান থেক যত ন পয কান true
এ ে শান না পাওয়া যায়, িঠক তত ণ পয এ ে শন েলা ইভালুেয়ট হেব। আমােদর উদাহরণিটেত - থম,
ি তীয় এবং তৃতীয় এই িতনিট এ ে শান ইভালুেয়েটড হেয়েছ, এবং তৃতীয়িটেত true এ ে শান পাওয়া গেছ,
এবং grade = 'C'; এই কাড কিট এি িকউট হেয়েছ।
এভােব আমােদর যিদ একািধক কি শান এর জন আমরা if-then-else ব বহার কের কাড িলখেত পাির। যিদ
একািধক
পাঠ ৪: কে াল া -লুিপং- াি ং 38
বাংলায় জাভা
Switch
আমােদর কাড এ যিদ একািধক এি িকউশান পাথ থােক তাহেল, আমরা if-then এবং if-then-else ব বহার
কের কাড িলখেত পাির। তেব এর পিরবেত switch াটেম ও ব বহার করেত পাির। উদাহরণ-
পাঠ ৪: কে াল া -লুিপং- াি ং 39
বাংলায় জাভা
switch (month) {
case 1:
monthString = "January";
break;
case 2:
monthString = "February";
break;
case 3:
monthString = "March";
break;
case 4:
monthString = "April";
break;
case 5:
monthString = "May";
break;
case 6:
monthString = "June";
break;
case 7:
monthString = "July";
break;
case 8:
monthString = "August";
break;
case 9:
monthString = "September";
break;
case 10:
monthString = "October";
break;
case 11:
monthString = "November";
break;
case 12:
monthString = "December";
break;
default:
monthString = "Invalid month";
break;
}
return monthString;
}
For Loop
পাঠ ৪: কে াল া -লুিপং- াি ং 40
বাংলায় জাভা
যখন আমােদর একই কাজ বারবার করার েয়াজন হয় তখন আমরা লুপ ব বহার কির । ধ ন আপনােক ১০ বার
বাংলােদশ শ িট ি িদেত বলা হল তাহেল আপিন System.out.println("Bangladesh"); দশবার না িলেখ For
Loop ব বহার করেত পােরন ।
for(int i=1;i<=10;i++)
{
System.out.println("Bangladesh");
}
for(;;)
{
System.out.println("Bangladesh");
}
For-Each Loop: একটা এের র সব েলা এিলেম েক এে স করার জন আমরা For-Each Loop ব বহার
করেত পাির । িনেচর উদাহরণিট দখুনঃ
3
6
9
10
30
While Loop
পাঠ ৪: কে াল া -লুিপং- াি ং 41
বাংলায় জাভা
ফর লুেপর মতই যত ন লুেপর কি শন সত হয় তত ণ while loop তার িভতেরর টেম এি িকউট করেত
থােক ।
while (condition) {
//block of statements
statement 1;
statement 2;
...........
statement n;
}
উদাহরনঃ
class WhileLoopExample {
public static void main(String args[]){
int i=7
while(i>1){
System.out.println(i);
i--;
}
}
}
আউটপুটঃ
7
6
5
4
3
2
উদাহরনঃ
while(1==1){
System.out.println("Bangladesh");
}
কােরা মেন হেত পাের য for loop িদেয়ও তা এসব করা যায় তাহেল আবার while loop কন? মেন ক ন
আপনার এক ব ু আপনােক ফান কের বলেলা , তুই ১ ঘ ার জন (for) ওখােন দাঁিড়েয় থাক আিম আসিছ !
আেরকজন ফান কের বলেলা আিম যত ণ (while) না আসেবা তুই ওখােন তত ণ দাঁিড়েয় থাক ।
পাঠ ৪: কে াল া -লুিপং- াি ং 42
বাংলায় জাভা
থম ে আপিন জােনন য আপনােক িঠক কত ণ দাঁিড়েয় থাকেত হেব । া ািমং এ যিদ আপিন জােনন য
িঠক কতবার এই কাজিট আমােক করেত হেব তাহেল সে ে আপিন for loop ব বহার করেত পােরন । ২য় ে
আপিন িঠক জােনননা য কত ণ আপনােক দাঁিড়েয় থাকেত হেব । যখন আমরা জািননা য িঠক করবার লুপ চালােত
হেব সসব ে আমরা while loop ব বহার করেত পাির । যমনঃ আপিন যিদ একিট ট ট ফাইল থেক লাইন বাই
লাইন ইনপুট িনেত চান তখন আপিন while loop ব বহার করেত পােরন কারন আপিন িঠক জােনন না য কতটা
লাইন ইনপুট িনেল ফাইলটার শষ লাইেন প ছােনা যােব ।
do-while loop
যখন আমরা িঠক কতবার লুপিট চলেব তা জািননা িক িমিনমাম একবার এি িকউট করার দরকার পেড় তখন do-
while loop ব বহার করেত পাির ।
do {
// Statements
}while(condition);
উদাহরনঃ
do {
System.out.print(i);
i++; //increment by 1
System.out.print("\n");
}while( x < 10 );
}
}
আউটপুটঃ
5
6
7
8
9
চলেব ----
পাঠ ৪: কে াল া -লুিপং- াি ং 43
বাংলায় জাভা
পাঠ ৪: কে াল া -লুিপং- াি ং 44
বাংলায় জাভা
েত ব র ধারণা িনেয় একিট ছা ব াখ া দই, পরবতীেত আিম এই কথা েলা আেরা ব াখ া কের বলেবা। আমরা
সবাই কি উটার ব বহার কির, যারা একটু বিশ কৗতূ হলী তারা িন য় কি উটােরর ব খুেল খুেল দেখ ফেলেছ
য, এর মেধ নানা রকম য াংশ থােক, যমন, র ◌ াম, হাডিড , মাদারেবাড, িসিপইউ, কুিলং ফ ান ইত ািদ। এইসব
িমেলই কি উটার। িক মজার ব পার হেলা, এর সবই একিট কা ািন তির কেরিন। কও র ◌ াম তির কের,
কওবা মাদারেবাড, কও বা আবার িসিপইউ। িক সবাই আলাদা আলাদা ভােব সবিকছু তির করেলও আমরা যখন
পুেরা কি উটারিট এেস ল কির, িক সু র ভােব সব িঠক ঠাক ভােব লেগ যায়, কান সমস া হয় না। একজন
ম াকািনক-ও যার নািক কি উটার সােয় এ িডি নই, সও জােন িকভােব সব িকছু এেস ল করেত হয়। র ◌ াম
এর মেধ িক আেছ স স েক তার কানই ধারণা নই, িকংবা িসিপইউ । অবেজ ওিরেয়ে ড কনেস মূল
ব াপারিট হেলা এিট। একটা িসে েম অেনক েলা কে ােন থাকেত পাের, িক সব কে ােন েলা কও একা
তির করেব না এইটাই াভািবক, এবং এ েলা এমন ভােব তির করা হয় যােত খুব সহেজই এেদরেক এেস ল কের
পুেরা িসে ম দাড় করােনা যায়।
অবেজ ওিরেয়ে ড কনেস এর ধারণার সােথ পিরিচত হেত হেল েত আমােদর িকছু টাম বা শে র সােথ
পিরিচত হেত হয়। আিম েত এনালিজ বা উপমা িদেয় বুঝােনা চ া করেবা, তারপর মূল িবষেয় চেল আসেবা।
অবেজ (Object):
এর মােন হে ব । পৃিথবীেত যা িকছু দিখ, অনুভব কির, তার সবই ব । যমন- মাবাইল ফান, চশমা, এমনিক
আিম িনেজও একিট অবেজ । আমরা যেহতু া ামার, এখন একটু সভােব কথা বিল। া ািমং এ একটা
ধারণাও অবেজ । অবেজ ক িকভােব দখা হে তা িনভর কের য দখেছ তার উপর। মেন করা যাক, একিট
অিফেসর বেড়া কতা (CEO) স দখেব, এম িয়, িবি ং, িডিভশন, নাটপ , বিনিফট প ােকজ, লাভ িতর
িহেসব এ েলা অবেজ । একজন আিকেট দখেব, তার ান, মেডল, এেলেভশান, ডােনজ, ডি ল, আমাচার
ইত ািদ। সভােব একজন সফটওয় ার ইি িনয়ােরর অবেজ হেলা, াক, িকউ, উইে া, চক ব ইত ািদ। অবেজ
এর একিট ট থােক। ট হেলা িকছু তথ যা িদেয় ওই অবেজ েক আলাদা করা যায়, এবং তার বতমান অব ান
জানা যায়। যমন একিট ব াংক একাউ ট হেত পাের কাের ব ােল । একটা অবেজ এর মেধ আেরকিট
অবেজ থাকেত পাের, যা ওই অবেজ এর ট হেত পাের।
অবেজ সাধারণত িকছু কাজ কের থােক যােক বেল তার িবেহিভয়ার। যমন ধরা যাক, সাইক ােলর চাকা, চাকার ট
হেত পাের এর ব াসাধ, পিরিধ, গিত ইত ািদ এবং চাকার িবেহিভয়ার হেলা এিট ঘুের। এখন যেহতু আমরা সাইক াল
এর চাকােক ক আমরা া ািমং এর মাধ েম কাশ করেবা, সতুরাং এ েলােক আমরা ভ ািরেয়বল এ রাখেবা। আর
িবেহিভয়ার েলােক আমরা ফাংশন এর মাধ েম িলিখ। আমরা এর আেগ যােক ফাংশন বেল এেসিছ এখন থেক
আমরা ফাংশন ক ফাংশন বলেবা না, আমরা এেদরেক মথড বলেবা।
সুতরাং আমরা জানলাম, অবেজ এর দুইটা িজিনস থােক, ট ( অথাৎ িনেজর স েক ধারণা) এবং মথড ( স িক
িক কাজ করেত পাের)।
াস(Class)
অবেজ স েক আমরা জানলাম। াস হেলা সই অবেজ িট তির করার ি য়ার একিট অংশ। মেন কির আমরা
একিট কলম বানােত চাই, েত আমরা কান রকম িচ া ভাবনা না কের ফু িদেয় একটা িকছু বািনেয় ফলেত পাির
না। আমরা এর জেন পিরক না কির- কলমাটা দখেত কমন হেব, এিট ল া কতটুকু হেব, কলমিট িক িক কাজ
করেব ইত ািদ। এই পিরক না েলা আমরা আমরা কাথাও িলেখ রািখ। আমােদর এই লখা ডকুেম িট আসেল
াস। সহজ একিট ব াপার।
এক, ইনেহিরট া - নাম থেকই বুঝা যাে য এখােন বংশগিতর একটা িবষয় চেল এেসেছ। আসেলও তাই। ধরা যাক
একিট একটা চাকা। নানা রকম চাকা হেত পাের, যমন বােসর চাকা, সাইক াল এর চাকা, মটর সাইক াল এর চাকা
ইত ািদ। সব চাকার মেধ ই িক িকছু কমন ব াপার আেছ, এিটর ব াসাধ আেছ, পিরিধ আেছ এবং এিট ঘুের। সুতরাং
আমরা একটা চাকা নােমর অবেজ বানােত পাির যা বািক সব চাকা(বাস, সাইক াল এর) পূবপু ষ। এেত আমােদর
বিশ িকছু সুিবধা আেছ, ধান সুিবেধ হেলা, কমন িজিনস েলা িনেয় আমােদর পূবপু ষ তির করার কাজ একবার
কের ফলেলই হে , উ রপু ষ েলােত আপনা আপিন সই বিশ েলা চেল আসেব।
দুই, এনক াপসুেলশান- মােন হেলা িজিনসপ ক াপসুেলর মেধ ভের রাখা। আমরা অেনেকই ক াপসুল মিডিসন
খেয়িছ, এিটর বাইের একটা আবরণ িদেয় সব িকছু ভতের আটকােনা থােক । ব াপারিট এমিন।
িতন, পিলমরিফজম – ব িপতা। অথাৎ এিক অে নানা প। একটা অবেজ নানা সময় নানা রকম প ধারণ
করেত পাের।
তেব কন এই অবেজ ওিরেয়ে ড কনেস লাগেব সিট িনেয় হেত পাের। এবার তাহেল এই ে র উ র ব াখ া
করা যাক।
আমােদর পিরিচত থাগত বা িসিডউরাল া ািমং ল াং েয়জ যমন- িস এর িকছু অসুিবধা রেয়েছ। আমরা
চাইেলই সহেজ পুনরায় ব বহারেযাগ কে ােন তির করেত পাির না। সবেচেয় বড় অসুিবধা হেলা আমরা চাইেলই
একিট া াম থেক একিট ফাংশান কিপ কের অন একিট া ােম ব বহার করেত পাির না কারণ ফাংশন েলা
সাধারণত িকছু াবাল ভিরেয়বল এবং অন ান ফাংশন এর উপর িনভর কের। এই ল াং েয়জ েলা হাই- লেভল
এব াকশান এর জেন মানানসই নয়। যমন িস য কে ােন েলা ব বহার কের স েলা খুব লা- লেভল-এর যা
িদেয় একিট বা ব জগেতর সমস ােক খুব সহেজ িচ ায়ণ (portray) করা স ব হয় না। কা মার িরেলশনিশপ
ম ােনজেম বা িসআরএম অথবা ফুটবল খলােক সহেজ িস িদেয় িচ ায়ণ করা কিঠন।
১৯৭০ সােলর যু রাে র িতর া অিদদ েরর একিট টা েফাস তদ কের বর করার চ া কের কন আইিট(IT)
বােজট সবসময় িনয় ণ করা স ব হয় না। স েলার মেধ ধান েলা এমন- ৮০% বােজট ধুমা সফটওয় ার এর
জেন ব য় হয় আর বািক ২০% ব য় হয় হাডওয় ার এর জেন । এর মেধ ৮০% ব য় হয় ধুমা সফটওয় ার
মইনেটইন করার জেন , বািক ২০% তির হয় সফটওয় ার তির করার জেন । হাডওয় ার েলা সহেজই িরইউজ বা
পুনরায় ব বহার করা যায় এবং এেত এেদর ইি ি িট ন হয় না, এবং একিট হাডওয় ার একিট িবেশষ অংশ ন হেয়
গেল তা সহেজই আলাদা কের ফলা যায় এবং নতুন একিট িদেয় িরে স করা যায়। িক সফটওয় ার এর ে এমন
স ব হয় না, একিট া াম এর সমস ার জেন অন া াম এর সমস া তির হয় ইত ািদ।
এই সমস া সমাধান করার জেন এই টা েফাস পিরেশেষ াব কের য সফটওয় ার-ও হাডওয় ার এর মেতা হওয়া
উিচৎ। পরবতীেত তারা তােদর িসে ম এর ৪৫০ িট া ািমং ল াং েয়জ িরে স কের এডা (Ada) নােম একিট
অবেজ ওিরেয়ে ড া ািমং ল াং েয়জ ব বহার কের।
চলেব -------
## ইনেহিরট া -
এবার আমরা অবেজ ওিরেয়ে ড কনেস -এর আরও ভতের েবশ করেবা। েতই আমরা ইনেহিরেট িনেয়া
আেলাচনা কির।
ইনেহিরেট িনেয় কথা বলেত হেল এর সােথ আেরকিট িবষয় চেল আেস সিট হেলা অবেজ কে ািজশান। এিট
মাটামুিটভােব একটু কিঠন অন ান টিপক থেক। তাই এই টিপকিট পড়ার সময় একটু ধয িনেয় পড়েত হেব।
তা করার যাক-
যেহতু আমরা জাভা া ািমং কেরিছ, তা আমরা যতই এর ভতের েবশ করেত করেবা, ততই বুঝেত
করেবা য াস আসেল একটা া এেলান কে ােন নয়, বরং এিট অন ান ােসর উপর িনভর কের।
অথাৎ াস েলা একিট িরেলশন মইনেটইন কের চেল। এই িরেলশন েলা সাধারণত দুই ধরেণর হয়- Is - A এবং
Has – A।
আমােদর বা ব জগৎ থেক একটা এনালিজ দয়া যাক । যমন একিট িবড়াল, িকংবা কার অথবা বাস। িবড়াল হে
একিট ািণ। কার এর থােক চাকা এবং ইি ন। বাস এরও থােক চাকা এব ইি ন। আবার কার এবং বাস দুিটই
ভিহকল বা যান।
এখােন য উদাহরণ েলা দয়া হেয়েছ এর সব েলা মূলত Is - A অথবা Has – A িরেলশনিশপ মইনেটইন কের ।
যমন -
A cat is an Animal (িবড়াল একিট ািণ ।) A car has wheels ( কার এর চাকা আেছ ।)
A car has an engine ( কার এর একিট ইি ন আেছ ।)
তা ব পারিট একদম সহজ। িঠক এই ব পারিটেক আমরা আমােদর অবেজ ওিরেয়ে ট কনেস এর মাধ েম বলেত
পাির। যখন কান অবেজ এর মােঝ Is – A এই স কিট দখেবা তােক বলেবা ইনেহিরেট । আবার যখন কান
অবেজ এর মােঝ Has – A এই স কিট দখেবা তখন সই ব পারিটেক বলেবা অবেজ কে ািজশান।
ইনেহিরেট মূলত একিট ি -িরেলশানিশপ। অথাৎ এিট একিট অবেজ থেক ইনেহিরট কের আেস।
আর যখন আমরা অেনক েলা অবেজ িনেয় আেরকিট অবেজ তির করেবা তখন সই নতুন অবেজ হেলা মইড-
আপ বা নতুন তির করা অবেজ এই ঘটনািট হেলা কে ািজশান।
এর সবই আসেল একিট কনেস এবং আইিডয়া থেক এেসেছ, সিট হেলা কাড িরইউজ করা এবং িস ল করা।
যমন দুিট অবেজ এর কাড এর িকছু অংশ যিদ কমন থােক তাহেল আমরা সই অংশিটেক দুইিট ােসর মেধ
পুনরায় না িলেখ বরং তােক ব বহার করেত পাির।
ধরা যাক, আমরা দুিট অবেজ তির করেত চাই- Animal এবং Cat
আমরা জািন য সব Animal খায়, ঘুমায়। সুতরাং আমরা এই ােস এই দুিট বিশ আমরা এই ােস িলখেত পাির।
আবার যেহতু আমরা জািন য Cat হে একিট Animal। সুতরাং আমরা যিদ এমন ভােব কাড িলখেত পাির, যােত
কের এই Cat ােসর মেধ নতুন কের আর সই দুি্ ট বিশে র কাড আর িলখেত হে না, বরং আমর এই Animal
াসিটেক িরইউজ করলাম, তাহেল য ঘটনািট ঘটেব তােকই মূলত ইনেহিরেট বলা হয়।
এইভােব আমরা আরও অন ান Animal যমন, Dog, Cow ইত ািদ াস িলখেত পাির।
যমন আমরা একিট Car তির করেত চাই। Car তির করেত হেল আমােদর লাগেব Wheel এবং Engine. সুতরাং
আমরা Wheel এবং Engine এই দুিট াসেক িনেয় নতুন আেরকিট াস িলখেবা।
উপেরর Bicycle াসিটেত িতনিট িফ এবং চারিট মথড আেছ। এবার এই Bicycle থেক আমরা এর একিট
সাব- াস িলখেবা-
এই MountainBike াসিট উপের Bicycle এর সব িফ এবং মথড েলা ইনেহিরট কের এবং এেত নতুন কের
ধু একিট িফ এবং একিট মথড লখা হেয়েছ। তাহেল আমােদর MountainBike াসিটেত Bicycle াসিটর
সব া ািট এবং মথড অেটাম ািটক ািল পেয় গেলা।
এখােন এ Bicycle হে সুপার াস(Super Class) এবং MountainBike হে সাব- াস(Sub Class) । অথাৎ
য াস থেক ইনেহিরট করা হয় তােক বলা হয় সুপার াস এবং য াস সাব াস থেক ইনেহিরট কের
যিদও সাব- াস সুপার- ােসর সব েলা া ািট এবং মথড ইনেহিরটর কের, তেব সাব- ােস সুপার ােসর য কান
া ািট বা মথড ক অভাররাইড করা যায়।
public Circle() {
radius = 1.0;
color = "RED";
}
public Cylinder() {
this.height = 1.0;
}
@Override
public double getArea() {
return 2 * Math.PI * radius * height + 2 * super.getArea();
}
}
এই াসিটেত Circle এর মথডিট আমরা সাধারণ ভােবই পেয় যােবা। Cylinder এর ফল িনধারণ করেত
হেল getArea() কল করেলই হেয় যাে । িক আমরা জািন য Circle এবং Cylinder এর ফল
একভােব িনধারণ করা যায় না। এে ে আমরা যিদ Circle এর মথডিট ক ব বহার কির তাহেল আমােদর
ফেলর মান ভুল আসেব। এই সমস া সমধাণ করার জেন আমরা আমােদর Cylinder াসিটেত
getArea() মথডিটেক পুনারায় িলেখিছ।
এখােন ল রাখেত হেব য, দুিট মথড এর িসগেনচার, িরটান-টাইপ এবং প ারািমটার িল একই রকম হেত হেব।
এখন আমরা যিদ Cylinder াস-এর getArea() মথড কল কির, তাহেল অভারাইেডড মথডিট কল হেব।
অ েনােটশান(Annotation) @Override
@Override এই অ েনােটশানিট জাভা 1.5 ভাসেন থম িনেয় আসা হয়। কান মথডেক যিদ আমরা অভাররাইড
কির তাহেল সই মথড এর উপের @Override দয়া হয়। এিট ক াইলারেক ইনফম কের য, এই মথিট সুপার
ােসর অভাররাইেডড মথড।
তেব এিট অপশনাল হেলও অবশ ই ভাল যিদ ব বহার করা হয়।
super িকওয়াড
আমরা যিদ সাব াস থেক সুপার ােসর কান মথড বা ভিরেয়বল একেসস করেত চাই তাহেল আমরা এই
িকওয়াডিট ব বহার কির। িক আমরা জািন য সাব ােস অেটােমিটক ািল সুপার ােসর সব া ািট চেল আেস
তাহেল এর েয়াজিনয়তা িনেয় হেত পাের।
আমরা আবার উপেরর Cylinder াসিট আবার দিখ। এই াসিটেত আমরা নতুন আেরকিট মথড িলখেত চাই।
V = Pi * r^2 * h
= (Pi * r^2) * h
= Area of Circle * h
সুতরাং Cylinder ােসর getArea() মথডিট ব বহার করা যাে না। কারণ িসিল ােরর ফল-
A = (2 * Pi * r * h) + (2 * Pi * r^2)
িক আমরা যিদ Circle াস এর মথডিট ব বহার কির তাহেল আমােদর সমস া সমাধান হেয় যায়। এখন যিদ
আমরা সুপার াস(Circle) এর মথডিট কল কের এই মথডিট িলখেত চাই তাহেল -
অথাৎ সাব ােস যিদ মথড অভাররাইড করা হয় এবং তারপেরও কান কারেণ যিদ আমােদর সুপার ােসর মথড
ক কল করার েয়াজন হয় তাহেল আমরা সুপার( super ) িকওয়াডিট ব বহার কির।
জাভা মাি পল ইনেহিরেট সােপাট কের না। এর মােন হে আমার একিট াস ধুমা একিট াসেকই ইনেহিরট
করেত পাের।
কন া র অভাররাইিডং(Constructor Overriding)
মথেডর মত কন াকটরও অভাররাইড এবং ওভারেলাড (Overload) করা যায় । অভাররাইড করা যায় বলেত
অেনক ে কন াকটর অভাররাইড ম াে টির । প াের ক ােল যিদ এমন কান কন া র থােক যিট াইেভট নয়
এবং যিট এক বা একািধক ইনপুট প ারািমটার িনেয় থােক তেব চাই ােস অবশ ই সই কন া র অবশ ই
অভাররাইড করেত হেব । এটা বাধ তামূলক । একটা ছা উদাহরন িদেয় িবষয়িট আমরা পির ার কের িনেত পাির ।
class Animal {
String animalName ;
String animalColor ;
this.animalName = animalName;
this.animalColor = animalColor;
}
@Override
public void showColor() {
System.out.println("Before showColor in child");
super.showColor();
}
@Override
public void showName() {
super.showName();
System.out.println("After showName in child");
}
public void showDescription(){
this.showName();
System.out.println("Animal Work is: "+this.work);
this.showColor();
}
}
উপেরর কাডিট মন িদেয় ল ক ন । প াের াস Animal এর মােঝ একিট পাবিলক কন া আেছ যিট দুিট
প ারািমটার িনেয় থােক । তাই এটার চাই ােসও আমােদর অবশ ই একিট কন া র থাকেত হেব যিটর মােঝ
প াের ােসর ওই কন াকটর ইনেভাক করেত হেব । এটা ম াে টির । এিট না করেল কাড ক াইেলশন এরর
শা করেব এবং ক াইলই হেবনা । আেরা একিট িবষয় চাই ােসর কন া েরর মাঝ থেক প াের ােসর
কন া রেক super িকয়াওড িদেয় কল করেত হেব তেব , super িকয়াওড অবশ ই সবার উপর থাকেত হেব ।
এমনিক একিট ি টেম ও থাকেত পারেব না । super এর পর যা খুিশ থাকেত পাের কান সমস া নাই ।
এছাড়া অন একািধক কন া র িডে য়ার করার েয়াজন হেল সটাও করেত পারেবন , এটােক বলা হেব কন া র
ওভারেলািডং । যথারীিত এর মােঝও super বাবািজ অিধপত িবরাজ কের বেস থাকেব ।
তেব মথড আর কন া েরর ওভাররাইিডং এর মােঝ এটা বড় একটা পাথক য মথেডর ে সুপার আপনারা
কােজর সুিবধার জন যেকান যায়গার ব াবহার করেত পারেবন । তেব কন া েরর েত আঈন খুবই কিঠন ।
অভারেলািডং বলেত খুব সাধারন ভাষায় বাঝায় একই নােমর এবং একই িরটান টাইেপর ( নাও হেত পাের ) একািধক
মথড বা কন া র ( এে ে কান িরটান টাইপ থাকেব না ) িবদ মান থাকা । তার অথ দাড়ােলা একই ােসর মােঝ
একই নােমর এবং িরটান টাইেপর একািধক মথড বা কন া র িবদ মান থাকেব । িবষয়টা একটু গালেমেল মেন হে
তাইনা ? আসেল তমন িকছু ই নয় , বরং িবষয়িট অন অেনক িকছু র থেকও অেনক বিশ সরল । একই নােমর
মথড বা কন া থাকেলও তােদর ইনপুট প ারািমটার িক একই হেবনা । ইনপুট টাইপ হয়ত িভ টাইেপর হেব নাহয়
একিট মথড থেক অন া মথেডর ইনপুট প ারািমটার সংখ া িভ হেব । উদাহরন সহকাের আমরা আমােদর
কনিফউশন দুর করেত পাির । চলুন একিট উদাহরন দেখ নওয়া যাকঃ
this.initialNumber = initialNumber;
this.terminalNumber = terminalNumber;
}
this(0, terminalNumber);
}
public Main() {
this(0, 100);
}
উপেরর কাড সগেম িটেত আরা দখেত পারিছ য একই Main ােস একই নােমর কন া র ৩ িট । খয়াল
করেল দখা যােব য ৩ িট কন া র ায় একই কাজ করেলও তােদর ইনপুট প ারািমটার িক একই নয় । এেকক জন
এেকক রকম ইনপুট িনেয় কাজ করেছ । এভােব একই ােসর মােঝ একািধক কােজর জন একািধক কন া র
ব াবহার করােক বলাহয় কন া র অভারেলািডং । যখােন একই কন া েরর লাড অভার হেয় িগেয়েছ :P
ওেক, এবার আসা যাক মথড অভারেলািডং িবষেয় । কন া েরর মত মথড অভারেলািডংও সম ম াকািনজম
ফেলা কের । একিট উদাহরন িদেলই িবষয়িট পির ার হেয় যােবঃ
int result = 0;
for(int x : a){
result+=x;
}
return result;
}
উপেরা কাডিটেত দখুন sum মথডিট ৩ বার লখা হেয়েছ । মথেডর আইেডি ফায়ার, িরটান টাইপ সবই িঠক
আেছ তবু কাজ করেছ ! হ া কারন আপনার ইনপুর প ারািমটার িভ িদেয়িছ । থম sum মথড কবল ২ িট
না ােরর যাগ কের িদেত পাের । ি তীয়িট পাের ৩ িট না ােরর , আর শেষরিট পাের যত সংখ ক ইি জার না ারই
দওয়া হাক না কন স যাগ কের রজা িদেব । িস িল এটােকই বলা হয় মথড ওভারেলািডং । যখােন একই
নােমর একািধক মথড থােক যােদর নাম এক হেলও ইনপুট প ারািমটার বা কােজর ধরন স ূন আলাদা হয় ।
অ াব া াস ( Abstract Class ):
উপেরা কাডিটেত Animal একিট অ াব া াস । অ াব া িডে য়ার করার সময় class িকওয়ােডর আেগ
abstract িকওয়াডিট িলখেত হেব । অ াব া াস পাবিলক বা িডফ যেকানিটই হেত পাের । এই াস
অ াব া িডে য়ার করার কারন এর মােঝ আমরা একিট অ াব া মথড িডে য়ার কেরিছ যিটর নাম color ।
সহেজই আমরা বুঝেত পারিছ য অ াব া মথড িডে য়ার করেত গেল তার আেগ abstract িকওয়াডিট
ব াবহার করেত হেব । ল কের দখুন color মথেডর অ াে স মিডফায়ার, িরটান টাইপ ( ইনপুট প ারািমটার
িদেল দওয়া স ব ) সবই আেছ িক কান বিড নই । এজন এই মথডেক বলা হেয়েছ অ াব া মথড । একিট
অ াব া ােস যমন একািধক অ াব া মথড থাকেত পাের তমন সাধারন মথডও থাকেত পাের চুর পিরমান ।
হল কন এই অ াব া মথড ?
@Override
void color() {
System.out.println("Black");
}
}
public class Main {
উপেরা কাডিটেত আমরা Bird ােসর অবেজ কানভােবই ি েয়ট করেত পারেবা না যত ন পয না আমরা
এর সব অ াব া মথড ইি েম করিছ । স কাজিট করা স ব এই াসিটেক যিদ অন কান াস এ েট কের
এবং সব অ াব া মথড ইি েম কের অথবা অবেজ ি েয়ট করার সময় আমরা সব অ াব া মথড ইমি েম
কের দই । থম কাজিট আপনারা পােরন । এখােন ২য় উপায়িট দখােনা হলঃ
ই ারেফস ( Interface ):
ইনেহিরট াে র খুব পূন এবং কাযকরী একিট টামস হল ই ারেফস । ই ারেফস িডে য়ার করেত হয়
interface িকওয়াডিট িদেয় । এিট public বা িডফ যেকানিটই হেত পাের ােসর মত । আমরা ইেতামেধ
জেন ফেলিছ Abstract াস এবং অ াব া মথড িক িজিনস । অ াব া াস এবং মথড বুেঝ থাকেল
ই ারেফস বুঝেত পারা খুব বিশ কিঠন িকছু ই নয় । ই ারেফস এমন একিট াস যখােন সব লা মথডই অ াব া
। অথাৎ ১০০% অ াব া াসেক ই ারেফস বলা যায় । অ াব া ােস অ াব া মথড এবং র লার মথড
দুিটই িছল িক ই ারেফেস কান কার র লার মথড থাকেব না । ই ারেফেস কবল অ াব া মথডই থাকেব ।
চলুন আমরা একিট উদাহরন দেখ নইঃ
interface Animal{
interface Cow{
void work();
}
@Override
public void name(String animalName) {
System.out.println(animalName);
}
@Override
public String color() {
return "Red";
}
@Override
public void work() {
System.out.println("Gives Milk");
}
}
ল ক ন এখােন interface িকওয়াডিট িদেয় দুিট ই ারেফস িডে য়ার করা হেয়েছ যথা েম Animal এবং
Cow । Animal ই ারেফেসর মধ দুিট মথড আেছ যােদর একজেন public এবং abstract িডে য়ার করা
হেয়েছ িক অন মথডিট কবল িরটানটাইপ দওয়া হেয়েছ । এিটর কারন হল ই ারেফেসর মােঝ আপিন যিদ কান
মথেডর পূেব public এবং abstract িডে য়ার নাও কেরন তবু তারা বাই িডফ পাবিলক এবং অ াব া ।
এবার আিস Main ােস । এত ন আমরা যেন এেসিছ য জাভা মাি পল ইনেহিরট া সােপাট কেরনা তাহেল
এখােন কন দুিট ই ারেফস ইি েম করেছ ? হ া সটাই করেব কারন পের ব াখ া করা হেব । এখােন ল নীয় িবষয়
হল ই ারেফসেক িক implements িকওয়াড িদেয় ইমি েম করেত হয় । এখােন িক এ েট হেবনা । একিট
াস কবল অন একিট াসেক এ েট করেত পারেব তেব একই সােথ অন ন , এক বা একািধক
ই ারেফসেকও ইমি েম করেত পারেব । একািধক ই ারেফস ইমি েম করার েয়াজন হেল কমা ( , ) িদেয় একিটর
পর আেরকিট যাগ করেত হেব । তেব অবশ ই অ াব া মথড ইমি েম করেত ভুলেবন না । :P
উে খ অ াব া মথেডর মত ই ারেফেসরও কান অবেজ ি েয়ট করা যায়না । যায়না সটা বলা ভুল তেব
সরাসির যায়না । িকভােব যায় সটা বাঝার জন আপনােদর পিলমরিফজম পয যাওয়া লাগেব । ;)
## পিলমরিফজম (Polymorphism)
এবার আমরা কথা বলেবা পিলমরিফজম িনেয়। শ িটর মেধ ই একিট িবেশষ গা ীয আেছ যা িকনা একিট সাধারণ
কেথাপকথনেক অেনক পূণ কের তুলেত পাের। তেব এিট অবেজ ওিরেয়ে ড া ািমং এর একিট ব ল
ব ব ত কৗশল । এই শ িটর সহজ মােন হে যার একািধক প আেছ অথাৎ ব িপতা।
সহজ কথায় পিলমরিফজম হল এমন একিট টকিনক বা প িত যখােন আমরা একিট াস, অ াব া াস বা
ই ারেফেসর অবেজ ি েয়ট কির তার চাই ােসর কন া েরর মাধ েম । অথাৎ আমরা একিট ােসর অবেজ
ি েয়ট করেবা অন একিট ােসর কন া র কল কের । সহজ ভাষায় এিটই হল পিলমরিফজম ।
এখন এর একিট অবেজ তির করেত চাইেল – আমােদর new অপােরটর ব বহার কের তা একিট ভিরেয়বল এ
রাখেত হেব।
আমােদর জাভা া ািমং পিলমরিফজম সােপাট করায় আমরা myFavoriteBeverage এই রফােরে র যায়গায়
Is-A স িকত য কান টাইপ রাখেত পাির। যমন –
এখােন Coffee এবং Milk হে Liquid এর সাব- াস বা টাইপ এবং Liquid এেদর সুপার াস বা টাইপ।
পিলমরিফজম িনেয় আরও একটু আ য হেত চাইেল আমরা এখন একিট িবষয় জানেবা যা িদেয় আমরা কান একিট
অবেজ এর কান মথড কল করেবা তেব তা কান ােসর অবেজ সিট না জেনই। আেরকটু পির ার কের বিল,
আমরা যখন সুপার ােসর এর রফাের ধের কান এর মথড কল করেবা তখন িক আমরা জািন না য এিট আসেল
কান অবেজ এর মথড। যমন-
Liquid myFavoriteBeverage = // ….
আমরা এখােন একিট CoffeeCup াস িলেখিছ যার মােঝ addLiquid() নােম একিট মথড আেছ যা িকনা
একিট Liquid টাইপ parameter নয়, এবং সই Liquid এর swirl() মথড- ক কল কের।
িক আমরা আমােদর সিত কােরর জগেত একিট কিফ-কাপ এ ধুমা কিফ-ই এড করেত পাির তা নয়, আমরা
চাইেল য কান ধরেণর িলকুইড এড করেত পাির, সিট িম ও হেত পাের। তাহেল এই addLiquid মথড তা
ধুমা Liquid টাইপ parameter নয়, তাহেল আমােদর সিত কােরর জগেতর সােথ এই া ািমং মেডল এর
সাদৃশ থাকেলা কাথায় ?
তেব মজার ব পার এখােনই, আমােদর এই CoffeeCu p াসিট পিলমরিফজেমর ম িজক ব াবহার কের সিত কার
অেথই আমােদর সিত কােরর জগেতর CoffeeCup এর মেতাই কাজ কের।
উপেরর কাড েলােত দখা যাে য আমরা একিট CoffeeCup এর একিট অবেজ তির কের সিট ত িবিভ
রকম Liquid এড করেত পারিছ।
আেরকটু ল কির,
িকছু েয়াজনীয় তথ -
১. একিট সাব াস এর অবেজ েক আমরা এর সুপার ােসর রফাের এ এসাইন করেত পাির। ২. সাব ােসর
অবেজ েক সুপার ােসর রফাের -এ এসাইন করেল, মথড কল করার সময় ধু মা সুপার ােসর মথড
েলােকই কল করেত পাির। ৩. তেব সাব াস যিদ সুপার ােসর মথড অভাররাইড কের, তাহেল যিদও আমরা
সুপার াস এর রফাের ধের মথড কল করিছ, িক রানটাইম-এ সাব ােসর মথডিট কল হেব। মেন রাখেত হেব
এিট ধুমা মথড অভাররাইড করা হেলই সত হেব।
এখােন সাব ােসর অবেজ েক সুপার ােসর রফাের এ এসাইন করা হয়েছ। এেক বলা হয় আপ-কাি ং। এই
কাি ং সবসময় সইফ ধরা হয় কারণ আপকা ং এর ে সাব াস সবসময়ই সুপার ােসর সবিকছু ইনেহিরট কের
এবং ক াইলার ক াইল করার সময়-ই এ কাি ং করা স ব িকনা তা চক কের থােক।
উপেরর টেম িট ক াইলার ক াইল করেব না, কারণ String মােটই Liquid ােসর সাব াস নয়।
এে ে ক াইলার incompatible types ইরর দখােব।
হােমািজিনয়াস কােলকশন হল একই ােসর িকছু সংখ ক অবেজে র কােলকশন । একিট উদাহরন িদেয় িবষয়িট
একটু সুরাহা করা যাকঃ
interface Animal {
@Override
public void name(String animalName) {
this.animalName = animalName;
System.out.println("Name of the animal is: " + this.animalName);
}
}
ল ক ন । এখােন Cow াসিট Animal ই ারেফেসর চাই । এবং Main ােসর main মথড এর মােঝ
২ িট অবেজে র অ াের িডে য়ার করা হেয়েছ । একিট Animal ােসর অবেজে র অ াের যিটর সব লা অবেজ
Cow ােসর কন া র িদেয় ই ট ানিশেয়ট করা হেয়েছ । এখােন পিলমরিফজম । এবং অন িট অবেজ
অ ােরিট চীরাচিরত অবেজ অ াের । এই দুিই অ ােরই হল হােমািজিনয়াস কােলকশেনর উদাহরন । বাঝা যায়িন ?
ওেক, এখােন collection1 অ ােরিটর িতিট অবেজ ই Cow ােসর কন া র িদেয় ই ট ানিশেয়ট করা হেয়েছ
। তার মােন collection1 এর মােঝ সব লা অবেজ ই একই ধরেনর । যেহতু এই অ ােরিটর সব লা এিলেম
একই ধরেনর/ ােসর অবেজ সুতরাং এিটেক বলা হেব হােমািজিনয়াস কােলকশন । একই কথা collection2 এর
ে ও ােযাজ ।
িভ ধমী অবেজে র কােলকশনেকই বলা হয় হটােরািজিনয়াস কােলকশন । হটােরািজিনয়াস কােলকশন বুঝেত হেল
আমােদর একিট উদাহরন দেখ নওয়া উ মঃ
class Animal {
String animalName ;
public Animal(String animalName){
this.animalName = animalName;
}
public void name(){
System.out.println("Animal name is: "+this.animalName);
}
}
super(animalName);
}
খুব ভােলাভােব ল ক ন । আমরা Animal ােসর অবেজে র একটু অ াের িডে য়ার কেরিছ যার সাইজ ৪ ।
িক ই ট ানিশেয়ট করার সমস আমরা পিলমরিফজম মকািনজম ব াবহার কের এর চাই ােসর িভ িভ কন া র
িদেয় ই ট ানিশেয়ট কেরিছ । অথাৎ animals অ ােরিটর িতিট অবেজ ই আলাদা আলাদা কন া িদেয়
ই ট ানিশেয়ট করা এবং তােদর িবহ ািভেয়রাল পাথ আেছ । এধরেনর কােলকশনেক বলা হয় হটােরািজিনয়াস
কােলকশন ।
এবার একটু িভ প ায় এেগান যাক । মইন াসিটেক আমরা একটু মিডফাই করেবা । বাকী সবই িঠক থাকেব আেগর
মত ।
খয়াল কের দখুন আমরা Animal এবং Cat এর অবেজ ি েয়ট করার সময় কন া র ব াবহার কেরিছ Cat
এর িক Animal এর অবেজ থেক আমরা work মথডিট কান ভােবই কল করেত পারিছ না বা পারেবা না
িক Cat এর অবেজ থেক িঠকই পারিছ । কারনটা িক ? কারন হল Animal ােসর মােঝ িঠক য য মথড
আেছ স লােকই আমরা অ াে স করেত পারব তেব Cat এর ইমি েমে শন িদেয় । Animal এর মােঝ নই িক
Cat ােস বাড়িত আেছ এমন কান মথডেক আমরা অ াে স করেত পারেবা না । এমনিক Animal ােসর
অবেজে Cat ােসর work মথেডর কান রফাের ই ি েয়ট হেবনা ।
তাহেল এটা কির কন আমরা ? এটা করার পছেন বশ িকছু কারন থাকেত পাের । থমত আমরা প াের াস
এবং চাই ােসর ইমি েম শন িনেয় কাজ করেত চাইেল পিলমরিফজেমর এই সুিবধািট নওয়া হয় । অন কারনিট
হল মেমাির কনজা শন । ভেব দখুন যিদ Animal ােস ৩ িট মথড থােক য লার জন আপিন Cat ােসর
ইমি েমে শন ব াবহার করেত চান , িক Cat ােসর মােঝ ১৫ িটর মত মথড আেছ এবং অেনক অ াি িবউট ।
আপিন যিদ Cat এর অবেজ ি েয়ট কেরন তেব মেমাির থেক চুর স কনিজউম করেব উ অবেজ ।
অন িদেক আপিন যিদ Animal এর অবেজ ি েয়ট কেরন Cat এর কন া র ব াবহার কের তাহেল Cat ােসর
ইমি েমে শন ব াবহার করেত পারেছন এবং মেমাির থেক খুব কম মেমাির কনিজউম করেছ ( Animal
মথড লার জন েয়াজনীয় মােমাির মা ) । কানিট বিশ সুিবধাজনক ? এছাড়া আেরা কারন আেছ । পরবতীেত
স লা িনেয়ও আেলাচনা করা হেব ।
চলেব .....
তেব এই এেতা ােটকশান এর কারণ িক হেত পাের তা যিদ একটু জেন িনই েত তাহেল আমার মেন খুব ভাল
হয় –
যারা অেনক লখােলিখ কের এমনিক যারা কাড িলেখ তারাও জােন য, একটা লখা ততই ভাল হয় সটােক যত
বিশ ির-রাইট করা হয়। আপিন যিদ একটা কাড িলেখ ফেল রােখন এবং িকছু িদন পের আবার সিট খুেল দেখন-
দখা যােব য আপিন আরও একিট ভাল উপায় বর পেয় যােবন সই কাডিট লখার। এিট সব সময়ই হয়। এই বার
বার কাড চ কের নতুন কের লখােক বলা হয় িরেফ িরং(refactoring)। আমরা একিট কাডেক বার বার িলেখ
সটােক আরও বিশ িকভােব সহজেবাধ কাড লখার চ া কির যােত সই কাডিট আরও ভালভােব মইনেটইন
করা যায়।
িক এখােন একিট িচ ার িবষয় হে । আমরা জািন য অবেজ ওিরেয়ে ড া ািমং এর মাধ েম আমরা য
সফটওয় ার িসে ম তির কির তােত নানা রকম অসংখ অবেজ থােক যখােন একিট অবেজ আেরকিটর সােথ
তথ আদান দান কের, একিট আেরকিটর উপর িনভর কের কাজ কের থােক। ধরা যাক, A একিট অবেজ যার
উপর B িনভর কের। ধরা যাক B এখােন কনজু মার অবেজ । এখন আমারা যিদ A ক কান রকম পিরবতন করেত
চাই, তাহেল B আেগর মেতাই থাকেত চাইেব। এখােন দুেটা অবেজ হয়েতা দুইজন িভ া ামার িলেখ থাকেত
পাের। সুতরাং এেক অেন র পিরবতন িনেয় যােত সমস ায় পরেত না হয়, সই ব ব া করেত হেব। আমরা অেনক সময়
নানা রকম লাইে ির ব বহার করেত হয় িবিভ েজে এবং এ েলার উপর িনভর কের কের আমােদর েজ দািড়েয়
যায়। এই লাইে ির েলার মােঝই মােঝই ভাসন পিরবতন হয়। িক মজার ব পার হেলা এ েলা পিরবতন হেলও
আমােদর কাড নতুন কের িলখেত হয় না। আবার অন িদেক লাইে ির যারা তির কের তােদরও এই কাড পিরবতেনর
াধীনতা থাকা চাই, িক সে ে যােত আমােদর েজ এর কান সমস া যােত না হয় সটাও মেন রাখেত হেব।
তা এই সমস া সমাধােনর একিট উপায় আেছ। সিট হেলা- লাইে ির কাড-এর য মথড েলা আেছ স েলা
মােটও িরমুভ করা যােব না। কারণ আমরা যখন একিট লাইে িরর একিট িনিদ ােসর মথড িনেয় কাজ করেবা,
আমরা চাইেবা না কান ভােবই আমােদর কাড ভে যাক। লাইে িরর া ামার সই াস িনেয় যা িকছু করেত
পারেব, িক আমরা য সব মথড ব বহার কেরিছ স েলােক মুেছ ফলেত পারেব না। তারপর িফ বা া ািটজ
এর ে ও লাইে ির য িলেখেছ স িকভােব জানেব য কান িফ বা া ািটজ েলা আমরা আমােদর েজ এর
ে একেসস কেরিছ? কান ভােবই জানার উপায় নই। কারণ আমারা আমােদর কাড িকভােব কেরিছ যা লাইে ির
য িলেখেছ তার জানার কথা নয়। িক য া ামার লাইে ির িলেখেছ স সবসময়ই চাইেব তার কাড এ নতুন িকছু
এড করেত, আেগর থেক ভাল করা ইত ািদ। এ্ই সমস া সমাধােনর জেন জাভা আমােদরেক কত েলা এেকেসস
িসফায়ার (access specifiers) িদেয় থােক, যার মাধ েম লাইে ির া ামার িঠক করেত পাের য কাড এর
কান কান অংশ েলা আমরা যখন আমােদর েজ এ ব বহার করেত পারেবা আর কান কান েলা করেত পারেবা
না। এেত সুিবধা হে , লাইে ির া ামার স সব অংশ েলা আমােদরেক ব বহার করেত িদে , সই অংশ েলােত
ইে মেতা পিরবতন/পিরবধন করেত পারেব কান রকম িচ াভাবনা ছাড়া।
আমারা যখন একটা বড় িসে েম কাজ কির আমােদর নানা রকম অবেজ িলখেত হয়। একিট অবেজ আেরকিট
অবেজ ক ব বহার কের। এই এেকেসস েটকশােনর মাধ েম আমরা িনধারণ কের িদেত পাির য একিট িনিদ
অবেজ এর কান অংশ েলা অন অবেজ ব ভহার করেত পারেব ,আর কান েলা পারেব না। এেত উপেরর
সমস ার সমাধান হেয় যায়। এছাড়াও আেরকিট ব াপার হয়। আমরা যখন কান একিট াস িনেয় কাজ করেত যােবা,
সই অবেজ -এ হাজার লাইন কাড থােক পাের। পুরটা এেকবাের দখেত গেল আমরা হয়েতা কনিফউজড হেয়
যােবা িকংবা খুব কমে কাড হেল বুঝেত অসুিবধা হেত পাের। িক সই কাড যিদ এমন ভােব করা থােক যখােন
অ অংশ আমােদর ব বহােরর জেন অেপন করা থােক, বািক েলা হাইড করা যােক তাহেল আমরা য অংশটুকু
হাইড করা সই অংশ িনেয় িচ া করেত হেব না। এই কাড হাইড করার ঘটনােক অবেজ ওিরেয়ে ড া ািমং এর
ভাষায় এনক াপসুেলশান(Encapsulation) বলা হয়।
জাভােত িতনিট এেকেস কে াল করার জেন িতনিট িক ওয়াড আেছ। স েলা হেল- Public , protected
এবং private এখন আমরা িবিভ রকম একেসস কে াল দখেবা-
Default Access
এর মােন হে আমরা যিদ কান িক-ওয়াড ব বহার না কির তাহেল সিট Default Access আর মােঝ পের। কান
াস এর ভিরেয়বল বা মথড এর আেগ যিদ কান একেসস মিডফায়ার না থােক তাহেল সই াসিট য প ােকেজর
মেধ আেছ সই প ােকজ এর সব াস থেক একেসস করা যােব।
package bd.com.howtocode.java;
import java.util.Random;
int getRandomInt() {
return new Random().nextInt();
}
}
উদাহরণ-
package bd.com.howtocode.java;
এই ােসর এর ভিরেয়বল name এবং emailAddress ক কান ভােবই অন কান াস থেক একেসস করা
যােব না। িক আমরা যিদ এেদর ক একেসস করেত চাই তাহেল একেসসর মথড ব াবহার করেত পাির।
class AudioPlayer {
protected boolean openSpeaker(Speaker sp) {
// implementation details
}
}
no modifier Y Y N N
private Y N N N
আমরা একিট া াম িলিখ যার একিট নরমাল া থােক, তেব কান কারেণ যিদ এই া ব াহত হয় তাহেল জাভা
রানটাইম একিট ইেভ ফায়ার কের, এেক এে পশান বলা হয়।
সহজ কথায় এে পশন হে এক ধরেণর ইরর যা িকনা া াম চলাকালীন সমেয় দখা িদেত পাের ।
আমরা যিদ এই া ামিট রান কির তাহেল console এ িনেচর আউটপুট-িট পােবা-
এই আউটপুট থেক আমরা বুঝেত পাির য, আমােদর া ামিট- ত একিট সমস া হেয়েছ এবং া ামিট এখােনই
থেম গেছ, System.out.println("Result: " + result); এই লাইনিট এি িকউট হয় িন।
int result = 0;
try {
result = divide(a, b);
} catch (ArithmeticException e) {
System.out.println("You can't divide " + a + " by " + b);
}
Result: 0
এবার ল ক ন। া ামিট িক থেম যাই িন, বরং ণ িদেয় য কান সংখ ােক ভাগ করা যােব না, তার জন
একিট মেসস ি কেরেছ এবং শষ পয েত কিট লাইন এি িকউট হেয়েছ।
এই া ামিটেত আমরা নতুন িকওয়াড ব বহার কেরিছ, স েলা হেলা- try, catch এবং এ েলা িদেয় আমােদর য
কাড কিটেত ইরর হওয়ার স বনা িছল, সই অংগটুকুেক wrap কেরিছ। এেত কের এই কাড ক-এ যিদ কান
ধরেণর ইরর হয় তাহেল া ামিট catch ক-এ চেল যায়, এবং এই ক এর ই াকশন েলা এি িকউট কের
এরপর িনেচর কাড ক এ চেল যায়।
আর এই ি য়ােক আমরা এে পশন হ াে িলং বিল, অথাৎ া াম এর কান অংেশ যিদ কান ধরেণর এে পশন
বা ইরর হয় তাহেল আমােদর া ামিট যােত ব না হয় যায় বরং সইসব অব ায় ইউজারেক যােত কের অথপূণ
মেসস দওয়ােক এে পশন হ াে িলং বেল।
যিদ কান কাড ক -এ যিদ ইরর হওয়ার স বনা থােক তাহেল আমরা সই কড ক- ক try ক িদেয় ইনে াজ
করেত হয়। উদাহরণ-
try {
code
}
catch and finally blocks . . .
এই try ক এর মােঝ এক বা একািধক লাইন কাড থাকেত পাের। catch এবং finally ক পেরর সকশেন
দখােনা হেব।
} catch (IOException e) {
}
}
উপেরর া ামিটেত একিট মথড আেছ - writeList() যা িকনা একিট ফাইল এ একিট িল থেক ভ ালু পেড় তা
রাইট কের। এই মথড-িট ত একািধক এে পশান বা ইরর হেত পাের। যমন -
out = new PrintWriter(new FileWriter("file.txt")); এই লাইনিটেত আমরা একিট ফাইল অেপন করার
চ া কেরিছ। িক এই ফাইলিট িসে েম নাও থাকেত পাের, িকংবা থাকেলও সিট অেপন করা যাে না ইত ািদ।
সে ে আমাদের িসে ম IOException করেব এবং া ামিট ব হেয় যােব। এছাড়াও আমরা একিট ফর
লুপ ব বহার কেরিছ, এে ে ফাইল এ রাইট করার সময়ও ইরর বা এে পশন হেত পাের। তাই এইসব ইরর বা
এে পশন ক হ াে ল করার জেন আমরা কাড কিটেক try ক এর ভতের রেখিছ। এখন া ামিট চলার
সময় যিদ কান ইরর বা একেসপশন হয় তাহেল া াম এি িকশান সখান থেকই catch ক এ চেল যােব।
try ক এর সােথই catch ক িলখেত হয়। তেব আমরা একিট try েকর সােথ একািধক catch ক িলখেত পাির।
উদাহরণ-
try {
catch িকওয়াড এর সােথ প ােরে িসস এর মােঝ আমরা আ েম িদেত হয় যা িক টাইপ এে পশন হ াে ল করা
হে তা িনেদশ কের। এখােন ExceptionType একিট স হা ার । এখােন য কান াস যা িকনা Throwable
াস ক ইনেহিরট কের তা বসেত পাের।
try ক এর কান কাড-এ যিদ কান এরর বা এি েসপশন হয় তাহেল ােমর এি িকউশান পেয় catch েক
চেল আেস এবং ধুমা তখিন catch ক এর কাড এি িকউট হয়।
যিদ একািধক catch ক থােক তাহেল এে পশন এর টাইপ অনুযায়ী catch ক িসেলকেটড হয়।
try {
} catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
জাভা ৭ এবং পরবিত ভাসন েলার জেন একিট নতুন িফচার আেছ যােত কের একিট catch ক িদেয়
অেনক েলা এে পশন হ াে ল করা যায়। উহারহণ -
এখােন catch জ-এ একািধক এে পশান একিট ভািটেকল বার (|) িদেয় আলাদা করা হয়।
উপেরর উদাহরণ েলা থেক দখলাম য , try ক এর কাড -এ এে েসপশন হেল ধুমা catch েকর
কাড েলা এি িকউট হয়। তেব আমােদর এমন কান িসচুেয়শন থাকেত পাের যখন আমরা চাই ইরর হাক বা না
হাক, একিট কাড ক আমরা সবসমই এি িকউট করেত চাই , তাহেল আমরা finally ব বহার কির।
উপেরর া ামিট ত আমরা একিট ফাইল অেপন করিছ এবং িকছু কাজ কেরিছ। এজেন একিট FileReader
ােসর অবেজ তির কেরিছ। আমরা চাই এই FileReader অবেজি কাজ শষ হেয় গেল াজ করেত। এে ে
আমরা finally ক এ আমােদর একই ািজং এর কাডিট িলেখিছ। এেত কের এই সুিবধা হে য, আমােদর এই াই
ক-এর কাড কাজ ক ক আর না ক ক, শেষ আমােদর FileReader এর অবেজ িট াজ হেয় যাে ।
অথাৎ আমরা ধুমাে তখিন ফাইনালী ক ব বহার কির যখন আমরা না ম াটার য়াট, একিট কাড ক সবসময়ই
এি কউট করেত চাই।
try , catch এব finally ক ব াবহার কের এে পশন হ াে ল করার সময় আমােদর য িবষয়িটর উপর
িবেশষ িদেত হেব সিট হল িনিদ পেয়ে ই কবল try এবং catch ব াবহার করা । িঠক যখােন এে পশন
ঘটেব বা ঘটার স াবনা থাকেব সখােনই কবল আমােদর পার এে পশন হ াে িলং থাকা জ রী । অন থায় কাড
রান করেব িক কাি ত ফলাফল পাওয়া যােবনা ।
উদাহরন িহসােব আমরা মেন কির আমােদর একিট মথড িলখেত বলা হল যিটেত একিট ি ং অ াের পাস করা হেব
এবং সই অ াের এর মাঝ থেক য ি ং লা ইি জার না ার িরে েজ কের স লার যাগফল িরটান করেত হেব ।
আমরা যিদ কাডিট এভােব িলিখঃ
int result = 0;
try {
System.err.println(e);
}
return result;
}
}
উপেরর কাডিট 21 সংখ ািট ি করেব যিট getSum নামক মথিট িরটান করেছ । িক আমরা যিদ ইনপুট
ি ংিট একটু মিডফাই কের String[] strings = {"1", "2", "3", "four", "5", "6"}; কের দই তাহেল থেম ি
করেব 6 এবং তারপর ি করেব java.lang.NumberFormatException: For input string: "four । িক
বেলম অনুযায়ী ি করা কথা িছল 17 । কারন four বাদ িদেল বাকী যত লা ি ং ইি জার না ার িরে েজ কের
স লার যাগফল । সে ে আমরা যিদ কাডিট একটু মিডফাই কের িঠক যখােন এে পশন হওয়া স ব সখােনই
try কিট ব াবহার করতাম তাহেল এই সমস া থেক মুি পাওয়া স ব িছল । কাডিট যিদ এভােব কিরঃ
int result = 0;
try {
result += (Integer.valueOf(string));
} catch (NumberFormatException e) {
System.err.println(e);
}
}
return result;
}
}
এবার যিদ আমরা String[] strings = {"1", "2", "3", "four", "5", "6"}; এই ি ংিট ইনপুট আকাের দই তাহেল
দখেবা একটা এে পশন িঠকই া করেছ তেব রজা িহসােব আমরা যিট চেয়িছলাম সিটও ি করেছ ।
এভােব আমরা িঠক িনিদ পেয়ে এে পশন িডেট কের হ াে ল করেত পাির । এেত কের ওভারঅল কােডর
পাফরেম যমন বাড়েব তমন কাড অেনক বিশ বাগ ী ও হেব ।
জাভােত সব এে পশান েলা Throwable াসেক ইনেহিরট কের তির। অথাৎ এে পশান হাইআরিক এর একদপ
উপের এই Throwable াস এর অ ান। এর িঠক িনেচই দুিট সাব াস হেল - Exception এবং অন িট হেলা
RuntimeException । এবং এই দুিট াস দুিট আলাদা ণীিবভােগর সূচনা কেরেছ। তেব এই ণীিবভােগর
আেরকিট শাখা আেছ, সিট হেলা - Error তেব এ েলা া াম চলাকািলন সমেয় সাধারণত ধরা হয় না। এ েলা
মূলত জাভা রানটাইম িসে ম িনেজ থেক হ াে ল কের এবং এিট আমােদর এই বইেয়র আেলাচনার বাইের।
return data;
}
}
return data;
}
}
ফ টলাের যার বাংলা হেত পাের সমস া সিহ ু । আমরা যেহতু জািন য আমােদর া াম-এ সমস া হেত পাের,
এবং আমরা চাই য সখন সমস ািট হেব- তখনও া ামিট ব না হেয় অন কান ভােব চলেত থােক। আমরা যিদ
এমন ভােব া ামিট িলখেত পাির তাহেল সই া ামেক ফ টলাের া াম িলখেবা।
মেন করা যাক – আমােদর দেশ একটা সময় িত ঘ ায় একবার কের চেল পাওয়ার যত। এখন যিদ কান িসে ম
তির কির যা পাওয়ার এর উপর িনভরশীল, তাহেল যাখন পাওয়ার থাকেব না, তখন িসি মিট কাজ করেব না।
এজেন আমরা িবক ব ব া িহেসেব জনােরটর রাখেত পাির, যােত কের যখন মইন পাওয়ার লাইন থাকেব না, তখন
জনােরটেরর মাধ েম আমােদর িসে মিট চলেত থাকেব। এই িসে মিটেক আমরা তখন ফ টলাের িসে ম
বলেবা।
Take 1
Take# 2
Take # 3
Take #3 ত ইনপুন িহেসেব ইি জার এর পিরবেত ি ং দওয়ায় া ামিট কাজ কের িন, বরং অেনক েলা
লাইন ি কেরেছ যা িকনা বলেছ ইনপুিট সিঠক হয় িন। এই লাইন েলার
পাঠ ৭: ি ং অপােরশান
ি ং তির করা
ি ং ল এবং ি ং অপােরশান
ক ােরকটার এ াকশন
ি ং কমেপিরঝন
ি ং সািচং এবং মিডফাইং
ডাটা কনভারশন
ি ং বাফার
ি ং িবউ ার
সারসংে প
এখােন "Hello world!" হে ি ং িলটােরল যা অকেন েলা ক াের ার উ ৃ িত িচে র (“”) মােঝ িলখেত হয়।
জাভা কােডর মেধ কান ি ং িলটােরল থাকেল ক াইলার সিটেক String অবেজ –এ পিরণত কের যার ভ ালু
হয় উ ৃ িত িচে র (“”) মােঝর ক াের ার েলা ।
তেব অন ান অবেজ এর মেতা String ও new িকওয়াড এবং ক াকটর ব বহার কের তির করেত পাির।
String ােসর ১৩ িট কন াকটর আেছ। সুতরাং আমরা আরও ১৩ িট উপােয় ি ং তির করেত পাির।
উদাহরণ –
String Length
String ােসর মেধ length() মথড থােক যা একিট ি ং এর মেধ কত েলা ক াের ার থােক তার সংখ া িরটাণ
কের। String loremIpsum ="Lorem ipsum dolor sit amet.";
ি ং Concatenating
পাঠ ৭: ি ং অপােরশান 84
বাংলায় জাভা
ি ং এর ভতর বশ িকছু মথড আৈছ য েলা ব বহার কের আমরা ি ং মনুপুেলট করেত পাির।
charAt() – এই মথড ব বহার কের আমরা কান ইনেড এর ক াের ার আলাদা করেত পাির। উদাহরণ-
substring() – এই মথড ব বহার কের আমরা একিট ি ং থেক এর সাব-ি ং বা কান িনিদ অংশ আলাদা করেত
পাির। উদাহরণ-
toLowerCase() – লাওয়ারেকস লটাের কনভাট করার জেন এই মথড ব বহার কির। toUpperCase()
আপারেকস লটাের কনভাট করার জেন এই মথড ব বহার কির।
উদাহরণ –
িবেশষভােব ল ণীয়
জাভােত ি ং াস immutable, এর মােন হে , একবার কান ি ং অবেজ তির করেল তােক আর পিরবতন
করা যােব না। আমরা অেনক াস িলিখ, তারপর এর মােঝ িবিভ ভ ািরেয়বল রািখ, অবেজ তির করার পর সই
অবেজ র এর ভতেরর ভ ািরেয়বল েলা িবিভ সময় পিরবততন করেত পাির। িক ি ং এর ে এিট স ব
নয়। অথাৎ আমরা যিদ কান একিট ভ ালু িদেয় একবার একিট ি ং অবেজ তির কির তাহেল সিট আর পিরবতন
করা যােব না।
পাঠ ৭: ি ং অপােরশান 85
বাংলায় জাভা
এখােন যিদও মেন হে আমরা ি ং এর ভ ালু পিরবতন কের ফেলিছ। িক আসেল যা হে তা হেলা, আমরা থেম
একিট অবেজ তির কেরিছ, তারপর সই অেবজ এর ভ ালু এবং নতুন একিট ভ ালু িনেয় নতুন একিট অবেজ
তির কেরিছ, এবং যা str এখন নতন সই অবেজ েক রফার করেছ। আেগর অবেজ িটেক গােবজ কােল র িনেয়
চেল যােব।
ি ং পুল (Stirng Pool) স েক হয়েতা অেনেকই জািন। এিট একিট জাভা িহপ এর একিট শাল এিরয়া ।
আমােদর যিদ নতুন একিট ি ং তির করেত হয়, সই ি ং যিদ আেগ থেকই ি ং পুল এ থেক থােক, তাহেল নতুন
কের আর তির না কের আেগর অবেজ িটর রফাের দওয়া হয়। এেত কের আমােদর মমির ু টি অেনক কেম
যাে ।
আমরা যিদ এই দুিট লাইন িলিখ, তাহেল আসেল জাভা িহপ এ একিট ি ং অবেজ -ই থাকেব, দুিট তির হেব না। যিদ
ি ং immutable না হয়, তাহেল একিট ি ং যিদ পিরবতন কির, তাহেল আসেল অন ান রফাের েলাও পিরবতন
হেয় যােব।
এছাড়াও, আমরা জািন য ি ং এর hashcode খুব বিশ ব বহার করা হয়। যমন HashMap। ি ং
immutable হওয়ায় এটা গ ারাি ড য, সবসময় hashcode এক-ই হেব, সুতরাং আমরা িতবার hashcode
ক ালকুেলট না কের িনিধ ায় ক ািশং করেত পাির।
আমরা ি ং প ারািমটার িহেসব অেনক বিশ ব বহার কের থািক, যমন, নটওয়াক কােনকশান, ফাইল অেপিনং
ইত ািদর ে । সুতরাং এিট immutable না হেল পিরবতন কের ফলা স ব যা িকনা একিট িসিরয়াস রকম
িসিকউিরিট ড হেত পাের। িক যেহতু ি ং immutable, সুতরাং সই স বনা নই।
তাছাড়া ি ং immutable হওয়ায় এিট ন াচারািল ড সইফ, এবং াধীনভােব য কন ড একেসস কের পাের
আমােদরেক ক কের এর ড সইফিট িনেয় িচ া করেত হয় না।
চলেব ......
পাঠ ৭: ি ং অপােরশান 86
বাংলায় জাভা
পাঠ ৮: জেনিরকস
জেনিরকস ইন জাভা (Generics in Java)
আমরা জাভা-এর টাইপ িসে ম স েক জািন। আমরা জািন জাভােত কান া াম িলখেত হেল আমােদর ক
টাইপ বেল িদেত হয় । যমন আমরা যিদ একিট মথড িলিখ তাহেল মথডিট িক টাইপ প ারািমটার এে করেব তা
বেল িদেত হয়।
তেব জাভােত একিট চমৎকার িফচার আেছ যােত কের আমরা অেনক সময় টাইপ না বেল িদেয়ই কাড িলখেত
পাির। আমরা জেনিরকস করার আেগ একিট পূণ তথ জেন িনই- জাভা া ািমং ল াং েয়জ এ সব
াস java.lang.Object াসিটেক ইনেহিরট কের। আমরা এিট িনেয় অন কান চ া াের আেলাচনা করেবা, তেব
এখন আমােদর ধু এই তথ টুকু মেন রাখেলই চলেব।
সহজ কথায় যিদ বিল, তাহেল জেনিরকস িদেয় আমরা যখন অবেজ তির করেবা তখন টাইপ প ািরিমটারাইজ
করেত পাির। অথাৎ আমরা যখন new অপােরটর িদেয় অবেজ তির করেবা তখন আসেল িস া নেবা এিটর
টাইপ িক হেব। এর আেগ আমরা এমন ভােব একটা াস বা মথড িলেখ ফলেত পাির যােত কের এিট য কান
টাইপ এর জেন কাজ কের।
পাঠ ৮: জেনিরকস 87
বাংলায় জাভা
//¬³Û½ Û× ÈÑ Ú× , ¬´ÚáÆ T Øá ¹ ½Ú¦È ÍÚÏÚÛ̽ÚÏ ÍÚ ¤ÊẠâÂÛÏ ³ÏÚÏ ×ÌÎ ÛÏáÎÑ ½Ú¦È ÛÄáÎ ÛÏá Ñ× ØáÊ
public class Generic<T> {
T obj;
// ¬³½Ú ½Ú¦È ÍÚÛÏÎÊÑ Û¿á ÎÚÏ ³ÏÚ ØáÑÚ
// ¤ÊẠâÂÛÏ ³ÛÏ ¬Ê¢ iObj áÏÉÚáÏ × ¬ ¬×Ú¦Æ ³ÛÏ ¬Ê¢ ³Æ Ú³½Ï ¥µÝ áÌ ½ ÛØá×áÊ 88 ÈÚ× ³ÛÏ
iObj = new Generic<Integer>(88);
// ÏÚƽڦÌ-¬ ÂÚØáÑ áºáÆÛϳ Ú×Û½á T obj ¬³Û½ ¦Û ½ºÚÏ ØáÎ ÍÚ°ÎÚÏ ³ÃÚ, Û ½ ³áÏ áÄ´Ú ÍÚ³
iObj.showType();
int v = iObj.getObj();
// ¦Û ½ºÚÏ ÍÚÑÝÛ½ ¬Ï ÍÚÑÝ ¬³á×× ³³áÏ v á ÏÚ´Ú ØÑ
পাঠ ৮: জেনিরকস 88
বাংলায় জাভা
এই া ামিট যিদ রান করা হয়, তাহেল িনেচর আউটপুট েলা দখা যােব -
আউটপুট েলা থেক বুঝা যাে য , আমােদর া ামিট সিঠক ভােব কাজ করেছ এবং একিট জেনিরক ােস
একিট ইি জার এবং একিট ি ং প ারািমটারাইজড করেত পেরিছ।
আমরা সাধারণত যভােব ভ ািরেয়বল িডে য়ার কির, সভােবই আমরা জেনির -এ ভ ািরেয়বল িডে য়ার করেত
পাির। এর জেন আলাদা কান িনয়ম নই।
T obj;
এখােন T অবেজ তির করার সময় একিট িরেয়ল অবেজ অথাৎ আমরা য অবেজ প ািরিমটারাইড করেবা তা
ারা িত ািপত(replaced) হেব ।
আমরা জািন য জাভা একিট ািটক টাইপ অথাৎ টাইপ সইফ ল াং েয়জ। অথাৎ জাভা কাড ক াইল করার
সময় এর টাইপ ইনফরেমশন িঠক ঠাক আেছ িকনা তা চক কের নয়।
অথাৎ -
Generic<Integer> iObj;
এখন অবেজ তির করার সময় যিদ ডাবল প ারিমটাইরজড কির এবং iObj ত এসাইন কির, তাহেল
পাঠ ৮: জেনিরকস 89
বাংলায় জাভা
তাই-
এই াটেম িট ভ ািলড নয়। অথাৎ ি িমিটভ টাই এর ে জেনিরকস কাজ করেব না।
জেনিরক াস এর িসনট া -
এবার তাহেল দুিট টাইপ প ারািমটার িনেয় একিট উদাহরণ দখা যাক-
পাঠ ৮: জেনিরকস 90
বাংলায় জাভা
public Tuple(X x, Y y) {
this.x = x;
this.y = y;
}
public X getX() {
return x;
}
public Y getY() {
return y;
}
একিট টাপেলর মেধ আমরা চাইেল আেরকিট টাপল রােখ পাির - িনেচর উদাহরণিট চমৎকার-
তেব আমরা যিদ জাভা ৭ অথবা ৮ ব বহার কির তাহেল উপেরর লাইনিট সংি ভােব িলখেত পাির –
পাঠ ৮: জেনিরকস 91
বাংলায় জাভা
ºÚËÚ ø এ একিট নতুন অপােরটর সংযু হেয়েছ যােক বলা হয় ডায়ম অপােরটর। এিট ব বহার কের আমরা
জেনরকস এ verbosity িকছু টা কমােনা যায়। অথাৎ
অথাৎ জেনিরকস লখার সময় বাম পােশ টাইপ প ারািমটার ইনফরেমশন েলা িলখেল ডান পােশ িলখেত হয় না ।
এিট অেটাম ািটক ালী ইনফার করেত পাের।
Bounded Types
আমরা উপের দুিট উদাহরণ দেখিছ য েলােত আমরা য কান ধরেণর টাইপ প ারািমটারাইউজড করেত পাির। িক
কখেনা কখেনা আমােদর টাইপ restrict করেত হয়। যমন- আমরা একিট জেনিরক াস িলখেত চাই যা িকনা একিট
এের- ত রাখা কত েলা না ার-এর গড়(average) িরটান করেব এবং আমরা চাই, এই এের ত য কান ধরেণর
না ার থাকেত পাের, যমন- ইি জার, ািটং পেয় , ডাবল ইত ািদ। আমরা টাইপ প ারািমটার িদেয় বেল িদেত চাই
কখন কানটা থাকেব। উদারহরণ দখা যাক-
পাঠ ৮: জেনিরকস 92
বাংলায় জাভা
এভােরজ ক ালকুেলট করার জন আমােদর এভােরজ মথড সবসময় এের থেক ডাবল ভ ালু এে েপ কের। িক
আমােদর এের-এর টাইপ যেহতু য কান রকম হেত পাের, সুতরাং সব অবেজ থেক ডাবল ভ ালু পাওয়ার উপায়
নই।
এই াসিটেত আমরা একিট restriction এড করেত পাির যােত কের এই টাইপ প ারািমটার ধুমা না ার(ইি জার,
ািটং পেয় ,ডাবল) হেব, নতুবা এিট কাজ করেব না।
আমরা জািন য সব িনউেমিরক অবেজ েলার সুপার াস হে Number . এবং Number এ doubleValue()
মথড িডফাইন করা আেছ। সুতরাং আমােদর াসিটেক একটু পিরবতন কির।
একটু ল ক ন-
আমরা াস ডিফেনশেন আমােদর টাইপ সেহা ার T না ারেক extend কের। এিট আমােদর টাইপ প ারািমটার
পাস করেত restrict কের । অথাৎ আমরা ধু মা সসব টাইপ পাস করেত পারেবা যারা Number এর সাব
টাইপ।
সুতরাং আমােদর এই Stats াস এখন Integer , Double , Float , Long , Short , BigInteger ,
BigDecimal , Byte ইত ািদ অবেজ এর জেন কাজ করেব।
সুতরাং দখা যাে য, জেনিরকস এর সুিবধা ব বহার কের আমরা এই াট াসিট আলাদা আলাদা কের
অেনক েলা না িলেখ একিট িদেয়ই কাজ কের ফলা স ব হল।
Wildcard Arguments
পাঠ ৮: জেনিরকস 93
বাংলায় জাভা
এিট যিদ ক াইল করেত চ া কির, তাহেল ক াইলার incompatible types ইরর দেব। িক আমরা জািন য,
সকল অবেজ এর সুপার াস Object । তাছাড়া আমরা polymorphism থেক জািন য
আমরা সাব ােসর রফাের ক সুপার ােসর রফাের এ এসাইন করেত পাির। সুতরাং উপেরর াটেম -িট কাজ
করার কথা।
২ না ার লাইনিট কাজ করেছ না । যিদও বা এিট কাজ কের এবং আিব াির কান একিট অবেজ যিদ objLst এড
করা হয় তাহেল িক strList করাে ড হেয় যােব এবং সিট আর ি ং থাকেব না।
ধরা যাক, আমরা একটা print মথড িলখেত চাই যা িকনা একিট িল এর ইিলেম েলা ি কের।
এিট িক ধুমা List<Object> একেস করেব , List<String> অথবা List<Integer> করেব না।
উদাহরণ-
এই সমস া দূর করার জেন জাভােত একিট একিট অপােরটর ব বহার করা হয় – যার নাম wildcard (?)।
আমরা যিদ আমােদর print() মথডিট িনেচর মেতা কের িলিখ, তাহেল িক আমােদর সমস া দূর হেয় যােব।
পাঠ ৮: জেনিরকস 94
বাংলায় জাভা
List<?> lst এর মােন হে আমরা এর টাইপ আমােদর জানা নই, এিট য কান টাইপ হেত পাের। যেহতু সব
টাইপ এর সুপার াস Object সুতরাং এিট যেকান টাইপ এর জেন কাজ করেব।
Bounded Types এর মেতা আমরা Wildcard Arguments কও Bounded কের ফলেত পাির ।
উদাহরণ -
এিট ধু মাে Foo এর সাব াস েলা ক েসস করেত পারেব। এেক Upper Bounded Wildcards বেল ।
আমরা যিদ এমন কান মথড িলখেত চাই যা ধু মা Integer, Number, and Object েসস করেব অথাৎ
Integerএবং এর সুপার াস েসস করেব তাহেল -
Generic Methods
আমরা মূলত এেতা ণ জেনিরক াস িনেয় কথা বেলিছ। আমরা একিট াসেক জেনিরক না কের ধুমাে এর
একিট বা একািধক মথড ক জেনিরক কের িলখেত পাির।
উদহরণ-
পাঠ ৮: জেনিরকস 95
বাংলায় জাভা
আমরা এবার চ া করেবা িকভােব আমরা একিট জেনিরক িসংগিল িলংকিল িলখেত পাির --
/**
* @author Bazlur Rahman Rokon
* @date 2/4/15.
*/
public class SinglyLinkedList<Type> {
private long size;
size++;
if (size == 1) {
tail = head;
}
}
পাঠ ৮: জেনিরকস 96
বাংলায় জাভা
if (size == 0) {
tail = null;
}
}
}
size--;
}
}
return getHead().getValue();
}
// four scenario
// 1. empty list- do nothing
// 2. single node : ( previous is null)
// 3. Many nodes
// a. node to remove is first node
// b. node to remove is the middle or last
পাঠ ৮: জেনিরকস 97
বাংলায় জাভা
if (current.getNext() == null) {
tail = prev;
}
size--;
} else {
removeFirst();
}
return true;
}
prev = current;
current = current.getNext();
}
return false;
}
return size;
}
পাঠ ৮: জেনিরকস 98
বাংলায় জাভা
পাঠ ৮: জেনিরকস 99
বাংলায় জাভা
/**
* @author Bazlur Rahman Rokon
* @date 2/4/15.
*/
public class LinkedListDemo {
public static void main(String[] args) {
SinglyLinkedList<Integer> integers = new SinglyLinkedList<>();
integers.addFirst(4);
integers.addFirst(3);
integers.addFirst(2);
integers.addFirst(1);
integers.print();
Output:
ইনপুট আউটপুট সংে েপ যােক আমারা বিল আই/ও (I/O) য কান কি উটার িসে ম বা া ািমং ল াং েজর
একিট মৗিলক িবষয়। য কান া াম িলখেত গেলই আসেল আমােদর আই/ও দরকার হয়। তেব এই িবষয়িট িঠক
ততটা মজার না যতটা অন ান িবষয় েলা। খািনকটা ইেলি িসিটরর মেতা। আমরা জািন েত কিট বািড়েতই এিট
আেছ, দরজা িদেয় েবশ কেরই আমােদর হাত সুইচেবােডর িদেক চেল যায়, আমার সুইচ িটপ িদই, এবং লাইট েল
উেঠ। এর পছেনর ব পার েলা িনেয় যমন ইেলি িসিট কাথা থেক এেলা, িকভােব কাজ কের এসব িনেয় আমােদর
িচ া করেত হয় না। এ েলা নপেথ থেক িঠক ঠাক মেতা কাজ কের। আই/ও অেনকটা এরকম।
এবার ইনপুট আউটপুটেক সং ািয়ত করা যাক। একিট া াম মূলত ডাটা আর ফাংশন এর সমি । অথাৎ ফাংশন
ডাটা েলা িনেয় কাজ কের। তা এই ডাটা েলা কাথাও থেক তির হয় এবং স েলােক আমােদর া াম
ফাংশন েসস কের । েসসকৃত ডাটা েলা হে আউটপুট। সহজ কের বলা যেত পাের, আমােদর া াম কান
সাস থেক ডাটা পেড় এবং কান একটা ডি েনশেন রাইট কের। উদাহরণ িহেসেব দওয়া যেত পাের- আমােদর
িকেবাড একিট ডাটা সাস। আমরা একটা া াম িলখেত পাির যা িক বাড এ ডাটা টাইপ করিছ তা ইনপুট িহেসেব
িনে এবং System.out.println() মথড িদেয় স েলা কনেসােল ি করেত পাির।
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
উপেরর া ামিট িকেবাড থেক একিট লাইন পেড় সিট আপারেকইস এ কনভাট কের কনেসােল ি কের।
একিট একিট সরলতম এবং খুবই েয়াজনীয় ইনপুট/আউটপুট এর উদাহরণ। সাধারণত আমরা কান একিট ফাইল
থেক ডাটা পিড় এবং েয়াজনীয় েসিসং এর পর অন একিট ফাইল এ রাইট কির। তেব ইনপুট আউটপুট ধুমা
ফাইল এর মেধ সীমাব থাকেব এবন কান কথা নই। আমরা চাইেল একটা ি ং অবেজ থেক ডাটা পেড়
আেরকিট ি ং অবেজ রাইট করেত পাির। এে ে ইনপুট হে একিট ি ং অবেজ এবং আউটপুটও একিট ি ং
অবেজ । আবার একিট ফাইল থেক ডাটা পেড় একিট ি ং অবেজ এ রাখেত পাির। এভােব অেনক েলা
কি েনশান করেত পাির। তেব সব সময় য ই্নপুট এবং আউটপুট এক সােথই কাজ করেত হেব এমনটা নয়। কখেনা
কখেনা ধুমা ইনপুট অথবা ধুমা আউটপুট িনেয় একিট া াম তির হেত পাের।
তেব একজন জাভা া ামার এর কােছ আই/ও অেনক েলা কারেণই পূণ হেত পাের। জাভােত অেনক েলা
আই/ও াস এর কার এিপআই এর সােথই থােক যার বিশর ভাগ – java.io প ােকজ-এ। তেব জাভােত অিধকাংশ
ে ই আই/ও দুই ভােগ ভাগ করা হেয়েছ। একিট হেলা বাইট িভি ক আই/ও যা input stream এবং output
stream িদেয় হ াে ল করা হয়, এবং অন িট হেলা ক ােরকটার িভি ক যা readers এবং writers িদেয় হ াে ল
করা হয়। তেব দুই টাইপ-এ অ াব াকশন সরবরাহ কের যা িদেয় সােসর সিঠক টাইপ না জেনও পড়েত বা িলখেত
পাির। এেত কের আমরা এিক মথড িদেয় কনেসাল থেক ডাটা পড়েত পারিছ আবার সই মথড িদেয় আমরা
নটওয়াক কােনকশন থেকও পড়েত পারিছ। এেতা হল িটপ অব িদ আইসবাগ। একবার আমরা অ াব াকশন এ
অভ হেয় গেল য কান সাস থেক ডাটা পড়েত পারেবা, আমােদর আসেল খুব একটা কয়ার করেত হেব না
িকভােব বা কান সাস থেক ডাটা আসেছ বা যাে । এখােন একটা পূণ কথা বেল রািখ, সটা হেলা, জাভা
া ামারেদর সব থেক পছে র িবষয় হে অ াব াকশন। অেনক ভূিমকা হেলা, এবার তাহেল আেরা ভতের েবশ
করা যাক। রেতই ফাইল িনেয় কাজ করা যাক।
পাথ েত কিট ফাইল এর জেন একিট িনিদ পাথ থােক যােত কের আমরা আলাদা করেত পাির। পাথ হে
কত েলা ক ােরকটার এর সমি এবং এেত ফাইেল এর নাম এবং িডেরকটরী লাকাশান থােক। যমন ওিয়ে াস
াটফেমর ে C:\users\rokonoid\hello.txt হে hello.txt ফাইল এর পাথেনইম যা িকনা C াইেভর users
িডেরকটিরর মােঝ rokonoid িডেরকটিরেত আেছ। Unix াটফেমর ে /home/rokonoid/hello.txt হে
hello.txt এর পাথেনইম।
পাথেনইম দুই কার হেত পাের- absolute path এবং relative path. Current working directory বেল একটা
কনেস আেছ, আর সিট হেলা, আমরা যখন য িডেরকটিরেত কাজ কির। মেন করা যাক আমােদর জাভা া ামিট
/home/rokonoid বা C:\users\rokonoid িডেরকটিরেত আেছ । তাহেল আমােদর কাের ওয়ািকং িডেরকটির
হে C:\users\rokonoid বা /home/rokonoid। এখন এই িডেরকটিরেত যিদ একিট hello.txt ফাইল থােক,
তাহেল এই ফাইল এর িরেলিটভ পাথ হেব hello.txt আর absolute path পাথ হেব
C:\users\rokonoid\hello.txt বা /home/rokonoid/hello.txt । িরেলিটভ পাথ কাের ওয়ািকক িডেরকটির
থেক িরজলভ করা যায়।
ফাইল তির
এবার দখা যাক িকভােব একিট ফাইল অবেজ তির করা যায়। java.io.File াসিট একিট পাথ এর ফাইল বা
িডেরকটিরেক িরে েজ কের। এ ােস বশ কেয়কিট কন াকর রেয়েছ,এর মােন বশ কেয়ক উপােয় একিট ফাইল
অবেজ তির করা যায়।
File(String pathname)
File(File parent, String child)
File(String parent, String child)
File(URI uri)
এখন আমােদর একিট পাথেনইম যিদ হয় hello.txt বা /home/rokonoid/hello.txt তাহেল আমরা িনেচর মেতা কের
ফাইল অবেজ তির করেত পাির।
অথবা
এই ফাইলিট আমােদর দওয়া পাথ এ য ফাইলিট আেছ তােক িরে েজ কের। তেব মজার ব পার হে ফাইল
অবেজ তির করেত হেল এই পাথিট িফিজক ািল থাকেত হেব এমন কান কথা নই। File ােসর বিশ িকছু মথড
আেছ য েলা িদেয় আমরা দখেত পাির এই পাইলিট আসেলই আমরা য পাথিট িদেয়িছ সখােন আিছ িকনা। না
থাকেল আমরা তির করেত পাির।
import java.io.File;
import java.io.IOException;
উপেরর উদহরণিটেত আমরা থেম আমােদর দওয়া পাথ িদেয় একিট ফাইল অবেজ তির কেরিছ। তারপর দেখিছ
এই ফাইিট আসেলই িফিজক ািল আমােদর দওয়া পাথ এ আেছ িকনা। যিদ না থােক, তাহেল সই পাথ এ নতুন
একিট ফাইল তির করা হেয়েছ।
এছাড়াও আরও িকছু বশ েয়াজনীয় মথড যমন- isFile() এবং isDirectory() আেছ য েলা িদেয় আমরা বর
করেত পাির কান পাথ ফাইল বা িডেরকটির িকনা।
এছাড়াও কাের ওয়ািকং িডেরকিট বর করা জেন একিট িবেশষ উপায় হেলা -
পাথ সপােরটর
একিট িবষয় মেন রাখেত হেব য িবিভ াটপম ফাইেলর পাথ এর দুিট পাট আলাদা করার জেন আলাদা ক ােরকটার
ব বহার কের থােক। যমন- windows ব াকে স () এবং unix িসে ম ফরওয়াড স (/) ব বহার কের থােক।
সুতরাং পাথ তির করেত হেল খয়াল রাখা জ রী কান াটফেম থেক া ামিট রান করা হে । িক আমােদর
যেহতু মূল উে শ াটপম িসিফক কাড না লখা, স ে িনেজর উপায়িট ব বহার করা যেত পাের।
এখােন File.separator একিট কন া যা য াটফেম া ামিট রান করেছ তার উপর িভি কের সপােরটর
ি ং আকাের িদেয় থােক।
িডেরকটির তির
File ােস এ mkdir() এবং mkdirs() দুিট মথড আেছ য েলা ব বহার কের আমরা একিট িডেরকটির তির
করেত পাির। এবং এেদর মােঝ ফাইল তির করেত পাির।
import java.io.File;
import java.io.IOException;
dir.mkdir();
import java.io.File;
if (fileRenamed) {
System.out.println(oldFile + " renamed to " + newFile);
} else {
System.out.println("Renaming " + oldFile + " to " + newFile + " failed.");
}
}
}
ফাইল িডিলট করার জেন দুিট মথড রেয়েছ- delete() এবং deleteOnExit() এই মথড দুিট িদেয় ফাইল এবং
িডেরকটররী িডেলট করা যায়। তেব িডেরকটরী িডিলট করেত হেল অবশ ই িডেরকটির িট খািল থাকেত হেব, অথাৎ
িডেরকটরীেত যিদ আরও ফাইল থােক , তাহেল স েলা আেগ িডিলট কের ফলেত হেব। delete() মথডিট সােথ
সােথই কাজ কের তেব, deleteOnExit() মথডিট যখন JVM টারিমেনট কের তখন িডেলট কের। আমােদর
অেনকসময় া াম চলাকািলন টে ারাির ফাইল তির করার দরকার পের যা া াম টািমেনট হেয় গেল দরকার হয়
না, সসব ে এই মথড ব বহার করা যেত পাের।
File ােস কান মথড নই যােত কের সরাসির আমরা ফাইল কিপ করেত পাির। একিট ফাইল কিপ করেত হেল
আমােদরেক একিট নতুন ফাইল তির করেত হেব এবং সই ফাইল এর কে েলা িরড কের নতুন ফাইল এ রাইট
করেত হেব। পরবিত চ া াের এ িনেয় আেলাচনা করা হেব। িলি ং ফাইলস
আমরা একিট িডেরকটিরেত কত েলা ফাইল আেছ তার িল listFiles() মথড িদেয় সহেজই বর কের ফলেত
পাির। উদাহরণ-
import java.io.File;
ফাইল িফ ার
তেব অেনক সময় আমােদর ফাইল িফ ােরর েয়াজন হয়। মেন করা যাক একিট িডেরকটরীেত ধুমা png ফাইল
েলা আমােদর দরকার। সে ে -
import java.io.File;
import java.io.FileFilter;
@Override
public boolean accept(File pathname) {
String fileName = pathname.getName();
if (fileName.endsWith(".png")) {
return true;
}
return false;
}
};
উপেরর উদাহরণিটেত FileFilter এর একিট anonymous াস লখা হেয়েছ যা িকনা listFiles() মথডিট
paremeter িহেসেব িনে । এই িফ ােরর accept() মথডিটেত আমরা আমােদর িফ ার লিজকটুকু লখা হেয়েছ
যােত কের এিট ধুামা png ফাইল েলা িলি ং কের।
ইনপুুট/আউটপুট ি ম
ি ম এের আ িরক অথ হে বাহ । এর মােন হে অেনকটা পািনর ধারার মেতা একিট উৎস থেক অিবরাম ভােব
বাহ হে এমন িক আমরা িঠক ভােব উৎ স কতটুকু পািন আেছ জািন না। অথাৎ কনেসপচুয়ািল একিট অিবরাম
ডাটা বাহ। আমরা এই বাহ থেক ডাটা পড়েত বা িলখেত পাির। য কান ি ম একিট উৎস বা গ ব েলর সােথ
সংযু । উৎস ক বলা হয় ডাটা সাস এবং গ ব লেক বলা হয় ডাটা িসংক।
ইনপুট ি ম তির
ছিবেত দখা যাে একিট সাস থেক বাহ আকাের ডাটা া হে জাভা া ােম। এবং জাভা া ামিট
আেরকিট ডাটা া তির করেছ যা গ েব পৗছাে । তাহেল একিট সাস থেক ডাটা পড়েত হেল আমােদরেক
কেয়কিট ধােপ যেত হয় - ১. থেম একিট সাস িনধারণ করেত হেব। সাস একিট ি ং হেত পাের, িকংবা একিট
ফাইল অথবা একিট নটওয়াক কােনকশান। ২. সাস এর উপর িভি কের একিট ইনপুট ি ম তির করেত হেব। ৩.
ইনপুট ি ম থেক ডাটা পড়া। সাধারণত একটু লুপ এর মেধ ইনপুট ি ম এর read() মথড কল করেত হয় ,
এবং লুপিট তত ণ পয চেল যত ণ পয ডাটা পড়া শষ না হয়।
1. বাইট ি ম
2. ক ােরকটার ি ম। বাইট ি ম
বাইট িভি ক আই/ও িনেয় কাজ করার জেন বাইট ি ম-এ বশ সমৃ াস আেছ। সাধারণত বাইট ি ম য কান
টাইপ অবেজ ( যমন বাইনারী ডাটা) ত ব বহার করা যায়। সব বাইট ি ম এর াস েলা InputStream এবং
OutputStream এর সাব াস। যিদও আরও অেনক বাইট ি ম াস আেছ, িক যেহতু এই দুিট াস সবার উপের,
আমরা েতই এই দুিট াস িনেয়ই কথা বলেবা।
java.io.InputStream এিট একিট অ াব া াস এবং সকল ইনপুট ি ম এর সুপার াস। এেত িতনিট বিসক
মথড আেছ যা িকনা িকভােব ডাটা ি ম থেক পড়েত হয় তা িনেয় িডল কের। এছাড়াও ি ম াস করা, াস করা,
এবং কত েলা বাইট আরও পড়েত হেব ইত ািদ িনেয় িকছু মথড আেছ। এ েলা িনেয় একিট িডেটইল ব াংখ া করা
যাক। read() মথড:
এই মথডিট ১ বাইট unsigned ডাটা পেড় এবং এর ইি জার ভ ালু িরটান কের যা িক না ০ থেক 255 এর মেধ ।
যিদ কান বাইট না পাওয়া যায় তাহেল এিট - 1 িরটান কের এবং এেত কের আমরা বুঝেত পাির ি ম এর ডাটা শষ হয়
গেছ। আমরা একিট উদহারণ দিখ। যেহতু ইনপুট ি ম একিট অ াব া াস এবং এর বশ িকছু সাব াস আেছ,
উদাহরণ দওয়ার সুিবধােথ আমরা একিট ফাইল ইনপুট ি ম ব বহার কির যা িকনা কান একিট লােকশােন রাখা
একিট ট ট ফাইল পড়েত পারেব । থেম আমরা একিট ট ট ফাইল তির কের কান একিট লােকশােন রািখ।
সাধারণত েজ এর একিট ফা ার তির কের তােতও রাখা যেত পাের। এর পর এই ফাইল এ য কান একিট
ি ং িলিখ। এখােন আমার ফাইল এর নাম input.txt এেত িনেচর লাইিট িলেখিছ - The quick brown fox jumps
over the lazy dog. এবার িনেচর কাডিট রান কির।
import java.io.FileInputStream;
import java.io.IOException;
এখােন েত একিট FileInputStream াস এর ইনে ি েয়ট কেরা হেয়েছ। যেহতু InputStream একিট
abstract াস, এবং আমােদর ডাটা সাস একিট ফাইল, সুতরাং কংি ট াস িহেসেব FileInputStream
ব বহার করা হেয়েছ। এেত আ েম িহেসেব আমােদর ট ট ফাইলিটর লােকশান দয়া হেয়েছ। এখােন এিট
িরেলিটভ পাথ। আমােদর ওয়ািকং িডেরকটরী হে েজ িডেরকটরী, যেহতু ফাইলিট েজ িডের রীেতই রাখা
আেছ। যিদ ফাইলিট অন িডেরকটরীেত থােক সে ে absolute পাথ িদেত হেব।
তারপর একটা int c িডে য়ার করা হেয়েছ । এরপর একিট য়াইল লুপ রেয়েছ। এেত িতবার একিট কের বাইট িরড
কের c ত এসাইন করা হে এবং তা ি আউট করা হে । এই লুপিট তত ণ পয চলেব যত ণ পয read()
মথডিট -1 িরটান না কের। ফাইল িট পড়া শষ হেয় গেল এিট -1 িরটান করেব। কাডিট একিট াই ক াচ ক এর
মেধ কারণ আমার জািন য আই/ও আেছ খুব লা- লেভল থেক কাজ কের । এর মােঝ কান একিট সমস হেতই
পাের এবং তা হেল JVM IOException করেব এবং তা যােত আমরা হ াে ল করেত পাির। এছাড়াও একিট
ফাইনািল ক আেছ যখােন আমরা ি মিট ব কেরিছ। আমােদর খয়াল রাখেত হেব য, যখিন একিট ি ম এর কাজ
শষ হেয় যােব তখিন তা ব কের িদেত হেব। এিট অেনকটা আমােদর ওয়াশ েমর পািনর টপ এর মেতা। কাজ শষ
হেল আমরা অফ কের িদই যােত কের িরেসাস ন না হয়।
এখন উপেরর কাডিট যিদ রান কির তাহেল কনেসােল আমরা িনেচর আউটপুটিট দখেত পােবা-
84,104,101,32,113,117,105,99,107,32,98,114,111,119,110,32,102,111,120,32,106,117,109,1
12,115,32,111,118,101,114,32,116,104,101,32,108,97,122,121,32,100,111,103,46,
এর কারণ হে read() মথডিট এক সােথ একিট বাইট পেড় এবং এর ইি জার িরে েজে শান িরটান কের। আমরা
যিদ এেক িঠক আমােদর input.txt এর ি ং এর মেতা কের ি করেত চাই তাহেল ইি জারেক ক ােরকটার এ কা
করেত হেব। System.out.print((char)c);
আউটপুট ি ম তির
ছিবেত দখা যাে য জাভা া ামিট একিট আউটপুট ি ম ব বহার কের একিট ডাটা িসংক ডাটা া ফার
করেছ। আউটপুট ি মএর মাধ েম া াম থেক ডাটা ডাটা িসংেক পাঠােত হেল কেয়কিট ধাপ-এ যেত হয়- ১.
থেম একিট ডাটা িসংক িনধারণ করেত হেব। এিট একিট ফাইল হেত পাের, িকংবা একিট ি ং অবেজ বা
নটওয়াক কােনকশান। ২. ডাটা িসংক ব বহার কের একিট আউটপুট ি ম অবেজ তির করেত হেব। ৩. এরপর
আউটপুট ি মিট াস করেত হেব। ৪. এবং সবেশেষ আউটপুট ি মিট াজ কের িদেত হেব।
এবার আমরা চ া করেবা ডাটা িকভােব ডাটা িসংেক রাইট করা যায় । এে ে ডাটা িসংক িহেসেব একিট ফাইল
িনেত পাির। আউটপুট ি ম িহেসেব িনেত পাির FileOutputStream. OutputStream এর একিট একিট মথড
হে write() যা িদেয় আমরা ডাটা ফাইল এ রাইট করেত পাির। write() মথড এর ক েলা অভারেলািডং আেছ ।
এর যেকান একটা ব বহার করেত পাির। একিট ি ং অবেজ থেক আমরা সহেজই ডাটা বাইট আকাের একিট
অ ােরেত রাখেত পাির।
এরপর এই বাইট অ ােরেক আউটপুট ি ম এর আরইট মথেড আ েম িহেসেব পাস করেত পাির। উদাহরণ-
import java.io.FileOutputStream;
import java.io.IOException;
এরপর আউটপুট ি মিটেক াস করেত হয় flush() মথড ব বহার কের। আমােদর উে শ হে ডাটা িসংেক ডাটা
রাইট করা। এে ে আমরা FileOutputStream এ ডাটা রাইট করিছ যা িকনা একিট ফাইল এর অ াব াকশন।
আউটপুট ি ম বাইট েলােক আপােরিটং িসে ম ক দয় য িকনা আসেল বাইট েলা ফাইল এ রাইট করার জেন
রসপনিসবল। অপােরিটং িসে ম আসেল িনধারণ কের কখন বাইট েলা ফাইল এ রাইট করেব িক আমােদর আেগ
সব েলা বাইট অপােরিটং িসে মেক িদেত হেব। আউটপুট ি ম এর যেহতু অ াব া াস এবং এর অেনক েলা
কনি ট আেছ, এেদর কান কান াস িনেজর মােঝ বাইট েলার বাফার রেখ িদেত পাের। সে ে flush()
মথডিট বাফার ি য়ার কের দেব।
এবং কাজ শেষ আউটপুট ি ম িটেক াজ কের িদেত হেব। আউটপুট ি ম এর আরও বশ িকছু সাব াস হেলা -
ক ােরকটার ি ম
ক াের ার ি ম েলা বাইট ি ম এর মেতাই কাজ কের, তেব পাথক ধু এইটকুই য এরা ক ােরকটার িনেয় কাজ
কের। অথাৎ এ েলােক ধুামা ট ট িরড এবং রাইট করার জেন লখা হেয়েছ। InputStream এবং
OutputStream এর মেতা এখােনও দুিট সুপার াস রেয়েছ, য েলা হেলা - Reader এবং Writer.
ক াের ার ি ম সিঠক ভােব বুঝেত হেল আমােদর আেগ জানেত হেব ক াের ার ইনেকািডং স েক। আমরা জািন য
কি উটার মূলত র (raw ) িজেরা-ওয়ান িনেয় কাজ কের। িক আমরা যখন কান ট ট দিখ তা িক মােটও
িজেরা-ওয়ান বাইনারী িডিজট নয়, বরং িরেয়ল ক ােরকটার েলাই দিখ। এই িজেরা-ওয়ান বাইনারী ডাটা েলােক
ই ারে ট করার জেন এক ধরেণর ম ািপং থােক যােক বলা হয় ক ােরকটার ইনেকািডং। অেনক ধরেণর ক ােরকটার
ইনেকািডং থাকেলও সাধারণত ASCII ও ইউিনেকাড- বইজড ইনেকািডং েলা িনেয় আমােদর সমেচেয় বিশ কাজ
করেত হয়। ASCII বা আি - American Standard Code for Information Interchange এর সংি
প। এিট একিট ক ােরকটার ইনেকািডং প িত যা ইংেরজী বণ মালা েলােক না ােরর মাধ েম িরে জ কের।
িতিট ইংেরজী বণেক একিট কের না ার (০-১২৭) দওয়া হয়। এই ইনেকািডং প িতেত মা এক বাইট এর দরকার
হয়। আি িদেয় ধুমা ইংেরজী ট ট িনেয় কাজ করা গেলও পৃিথবীেত অসংখ ভাষা এবং বণমালা রেয়েছ।
পৃিথবীর সব আধুিনক বণমালা এবং ঐিতহািসক দিলল েলা িনেয় কাজ করার জন একিট নতুন প িত উ াবন করা
হয়, যার নাম ইউিনেকাড। এই ইউিনেকাড ইমি েম করার জেন অেনক েলা ক ােরকটার ইনেকািডং ি ম বা প িত
রেয়েছ, তেব সাধাণত UTF-8, UTF-16 বিশ ব ব ত হয়। UTF-8 ইনেকািডং িসে ম এ একিট ক ােরকটার ১
থেক ৪ বাইট হেত পাের এবং এিট ওেয়ব পইজ বা ইেমইল ব ব ত হয়। UTF-16 এর ে তা দই বা তেতািধক
বাইট হেত পাের।
অেনক সফটওয় ার িসে মই UTF ইনেকািডং ি ম ব বহার কের ট ট ার কের থােক। যেহতু এ েলা একিট
ক ােরকটার িরে েজ করেত হেল ১ বা একািধক বাইট দরকার হয়, সেহতু এ েলা পড়ার সময় যিদ আমরা
ইনপুটি ম ব বহার কের একবাইট কের পিড়, এবং তা char এ কনভাট কির, তাহেল আমরা অেনক সময়ই সিঠক
ভােব ডাটা িরড করেত পারেবা না। এই সসস া দূর করার জেন এবং সিঠক ভােব ট ট িরড বা রাইট করার জেন
Reader/Writer াস লখা হেয়েছ যা ধুমা ট ট িনেয় কাজ কের। মেন রাখেত হেব য, InputStream এর
read() মথড েত কবার এক বাইট কের িরটান কের আর Reader ােসর read() মথড িতবার একিট কের
ক ােরকটার িরটান কের। একিট বাইট এর ভ ালু ১-২৫৫ পয হেত পাের যখােন একিট ক াের ার এর ভ ালু ০
-৬৫৫৩৫ হেত পাের। তাহেল আমরা সহজ ভােব বলেত পাির, ইনপুট ি ম/আউটপুট ি ম র-বাইনারী ডাটা িনেয়
কাজ কের আর িরডার/রাইটার ধুমা ট ট িনেয় কাজ কের।
এই পাথক ছাড়া ক াের ার ি ম িনেয় কাজ করার সব পস েলা ইনপুট/আউটপুট ি ম এর পস এর মেতা।
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
এেতও ইনপুট ি ম এর একটা কের বাইট িরড করেত হয় একিট লুপ এর মােঝ।
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
try {
writer = new FileWriter("output2.txt");
writer.write(text);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```java
¬¦ ÛÂÆÛ½ ÊØÝÑ ÍÊØß ¿Ú½Ú Û×¢³। ÂáÊ ×Êá¸áÎ áÊÛÕ ÍÊØß ØÎ ÌÞÑ System.out .
System.in ¬³Û½ ¦ÆÈݽ Û Ì ÍÚ Û³ÆÚ áÍ á³ÚÆ ³Æá×ÚÑ á Ú ÚáÌÏ ºá Í Û³áÊÚ¿ ¬Ï ×Úáà ³ÚáÆá ¿। ¬Û½ System Úá×Ï ¬³Û½ Í
```java
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
double d = scanner.nextDouble();
ানার একিট ইউিটিলিট াস, যার সাহােয সহেজই আমরা িকেবাড থেক ইি জার বা ডাবল টাইপ ইনপুট িনেত
পাির। ানার কন াকর আ েম িহেসেব একিট ইনপুট ি ম নয়। এে ে আমরা System.in িট িদেত পাির
যােত কের এিট সরাসির িকেবাড থেক ডাটা পড়েত পাের।
System.err ও একিট আউটপুট ি ম যা িকনা System.out ি ম এর মেতাই কাজ কের , তেব এিট ধুমা
ইরর ি করার জেন ব বহার করা হয়। িকছু িকছু আইিডই এই ইরর ট ট েলা লাল রং-এ ি কের থােক।
DataInputStream এবং DataOutputStream াস দুিট ি িমিটভ টাইপ ডাটা কাজ করার জেন ব বহার করা
হয়। এেত বশ িকছু readxxx() এবং writexxx() মথড রেয়েছ য েলা ব বহার কের যেকান ধরেণর
িমিটভ ডাটা আমরা িরড/রাইট করেত পাির।
উদাহরণ-
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
try {
DataOutputStream dos = new DataOutputStream(new FileOutputStream(destFileName));
dos.writeInt(152);
dos.writeDouble(4.56);
dos.writeBoolean(true);
dos.writeLong(Long.MAX_VALUE);
dos.flush();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
try {
DataInputStream dis = new DataInputStream(new FileInputStream(sourceFile));
System.out.println(intValue);
System.out.println(doubleValue);
System.out.println(booleanValue);
System.out.println(longValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
উদাহরণিটেত DataInputStream কন াকটর আ েম িহেসেব একিট ইনপুটি ম নয়। যেহতু আমরা ফাইল
থেক িরড করিছ, সেহতু ইনপুটি ম িহেসেব FileInputStream ব বহার করা হেয়েছ।
কােলকশান মওয়াক
কােলকশন মওয়াক জাভার টপ লেভর একিট এিপআই কনেস । কােলকশান মওয়াক িকছু হাইিল
অপিটমাইজড ডাটা াকচার যার মাধ েম িবিভ ডাটা মেমািরেত ার করেত পাির এবং েয়াজন মত ব াবহার
করেত পাির । মেন ক ন অ াের িনেয় কাজ করেছন । কান একিট সমেয় মেন হল আপনার অ ােরর সাইজ যেথ নয়
আপনার কােজর জন তখন িক করেবন ? মেন ক ন আপিন িলংকড িল িনেয় কাজ করেছন কান একটা সমেয়
একটা এিলেম সাচ করার েয়াজন হেলা , সাচ করেলন । দখা গল অেন ন পর রজা জানােলা য সই
এিলেম ওই িলে ই নাই । এরকম নানা রকম সমস া এবং তার সমাধান িনেয় য সব ডাটা াকচার একি ত করা
হেয়েছ স লােকই একে বলা হয় কােলকশান । কােলকশান মােন হল সমি । এিট এমন িকছু ডাটা াকচােরর
সমি য লার িতিটই িবিভ ডাটােক সমি ত কের রােখ । হ া অ ােরেকও লা লেভল এক কার কােলকশান
বলা যেত পাের তেব মডান কােলকশন মওয়ােকর মােঝ এিটেক ধরা হয়না ।
ই ারেফস িক সিট আপনারা খুব ভােলাভােবই জােনন । যিদ না যেন থােকন তেব চ াপটার ৫.১ পেড় আসুন ।
কােলকশান একিট ই ারেফস । যই ই ারেফেসর মধ বেল দওয়া হেয়েছ কান একিট াসেক কােলকশান
মওয়ােকর অ গত হেত গেল িক িক বিশ থাকেতই হেব । কােলশন লা সাধারনত java.util প েকেজর
অ গত ।
সবার আেগ আমােদর জানা েয়াজন কনই বা আমরা কােলকশনস িনেয় কাজ করেবা ? এিট না িনেয়ও তা কাজ
করা যেতা । তাহেল কােলকশন কন !
১)অ াের িনেয় কাজ করার সময় আপিন িফ ড লে র বাইের কাজ করেত পারেতন না । অ ােরর বাউ াির িফ ড
এবং এিট বাড়ােনা বা কমােনার কান সুেযাগ নই রানটাইেম । কােলকশন এই সমস ার সমাধান কেরেছ । এিটর
সাইজ আপনার েয়াজন মত বাড়ােত এবং কমােত পারেবন ।
২)িলংক িল িনেয় কাজ করার সময় আপিন ইনেডে র সুিবধা পােবন না । এটা একটা বড় সমস ার কারন,
কােলকশেন আপিন ইে সুিবধা পােবন ।
৩) কবল ি িমিটভ নয়, সকল কার অবেজ এমিন একিট কােলকশেনর মােঝ আেরকিট কােলকশন িনেয় কাজ
করার মত ি িবিলিট পােবন ।
Collection<Interface>
Set<Interface>
HashSet
LinkedHashSet
SortedSet<Interface>
TreeSet
List<Interface>
ArrayList
Vector
LinkedList
Queue<Interface>
LinkedList
PriorityQueue
Object
Arrays
Collections
Map<Interface>
HashTable
LinkedHashMap
HashMap
SortedMap<Interface>
TreeMap
িল ( List )
িল List একিট ই ারেফস যিট সরাসির Collection ই ারেফসেক এ েট কেরেছ । এিট যেহতু একিট
ই ারেফস ( interface ) তাই আমরা সরাসির এটার কান অবেজ বা ই ট া ি েয়ট করেত পারেবা না ।
এজন অবশ আমােদর িচ ার খুব বিশ কারন নই । List ই ারেফসেক ইমি েম কেরেছ ArrayList ,
Vector এবং LinkedList াস । আমরা খুব সহেজ এ লার মাধ েম List এর অবেজ তির করেত পাির
। List হল আনসেটড অবেজ কনেটইনার যিট ডাটা ডুি েকিস সােপাট কের । মােন একই ডাটা একািধকবার
থাকেত পাের িলে র মােঝ ।
ধাপ ১ঃ
import java.util.ArrayList;
import java.util.List;
import java.util.LinkedList;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
List list, list2, list3;
list = new ArrayList();
list2 = new LinkedList();
list3 = new Vector();
}
}
ধাপ ২ঃ
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List list1 = new ArrayList();
ArrayList list2 = new ArrayList();
}
}
এমনিক কউ চাইেল কােলকশেনর অবেজ িনেয়ও কাজ করেত পােরন সে ে যিট করেত হেব ।
import java.util.ArrayList;
import java.util.Collection;
public class Main {
public static void main(String[] args) {
Collection c = new ArrayList();
}
}
ওেক অেনক হেয়েছ । এবার কােজর কথায় আসা যাক । List িনেয় িকভােব কাজ করা যায় সটাইেতা জানা
হেলানা এখেনা ! ওেক আর বিশ বক বক কের আপনােদর ধেয র পরী া িনবনা । থেম আমরা দখেবা িকভােব
একিট িলে ডাটা অ াড বা অ াসাইন করেত হয় ।
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(7);
list.add(5);
list.add(13);
list.add(17);
list.add(3);
}
}
উপেরা কােড <Integer> িদেয় বাঝােনা হেয়েছ এই িল িট কবল ইি জার টাইপ ডাটার জন কাজ করেব ।
এিটেক জেনিরক বলা হয় । চ াপটার ৮ এ আপনােদর এ িবষেয় জানা কথা । তারপর ArrayList এর কন াকটর
িদেয় list অবেজ েক ই ট ানিশেয়ট করা হেয়েছ । add মথড এই িলে একিট একিট কের ডাটা অ াড কের
এবং একিট বুিলয়ান ভ ালু িরটান কের । যিদ কান কারেন কান ডাটা অ াড করেত ব াথ হয় তেব false ভ ালু
িরটান কের ।
add(int index, E element) মথডিট যেকান একিট এিলেম িলে র িনিদ ইনেডে ইনসাট কের ।
addAll(Collection<? Extends E> c) মথডিট ইনপুট প ারািমটার িহসােব অন কান একিট িল বা
কােলকশন িনেয় তার িতিট এিলেম একটু একিট কের এই িলে ইনসাট কের দয় । addAll(int index,
Collection<? Extends E> c) মথডিট িঠক আেগর মতই কাজ কের । িনিদ ইনেড থেক অন একিট
কােলকশনেক ইনেজ করেত থােক নতুন িলে র মােঝ ।
উপেরর কাড সগেম িট মেন করলাম আেছ । আমরা কবল ডাটা িরড করার জন কাডিট িলখেবা । আমরা বশ
কেয়কভােব দখেবা য িকভােব একিট িল থেক ডাটা িরড করা যায় এবং এর মাধ েম আেরা িকছু মথড স েক
জেন িনব ।
প িত ১ঃ
System.out.println(list.get(i));
}
এিট এেকবাের চীরাচিরত প িত হেলও বশ কাযকর । এখােন অ ােরর মত ইে িনেয় খলা করার সুেযাগ আেছ ।
size মথডিট একিট ইি জার না ার িরটান কের যিট িনেদশ কের এই িলে মাট কত লা এিলেম আেছ ।
মােন এই িলে র সাইজ কত । get মথডিট একিট ইি জার না ার ইনপুট িহসােব নয় এবং সই ইে ে র
এিলেম িট িরটান কের । এমন কান ইনেড যিদ ইনপুট িহসােব দওয়া হয় যিট এই িলে র সাইেজর মােঝ পেড়না
তাহেল java.lang.IndexOutOfBoundsException এে পশন া করেব ।
প িত ২ঃ
for(int x: list){
System.out.println(x);
}
এিট এেকবাের চীরাচিরত প িত থেক একটু আধুিনক । এনহ া ফর লুপ । এই প িতেত এনহ া ফর লুপ িল
থেক একিট একিট এিলেম িত এিলেমে িপক কের x ভ ািরেয়বেলর মােঝ রফার করেছ এবং সিটই আমােদর
সামেন দিশত হে ।
প িত ৩ঃ
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
এিট আেরা একটু মডােরট প িত । এই প িতেত থেমই Iterator ই ারেফেসর একিট ই ট া ি েয়ট করা
হে িলে র iterator মথডিট কল কের । এই মথডিট একিট ইটােরটর অবেজ িরটান কের যিট এই িলে
টপ টু বটম ইটােরট করেত পাের । ইটােরটেরর hasNext মথডিট একিট বুিলয়ান ভ ালু িরটান কের । িত
ইটােরশেনর পর স বেল দয় এর পর আর কান এিলেম অবিশ আেছ িক না । ইটােরটেরর next মথডিট
িতবার নতুন একিট এিলেম ভাইড কের এবং এিটর কাউ ার পেয় ার তার পেরর ইনেডে িশ ট কের । যােত
কের পেররবার নতুন একিট এিলেম িরটান করেত পাের ।
প িত ৪ঃ
list.forEach((x) -> {
System.out.println(x);
});
হাল আমেলর আেলািচত প িত । এিটেক বলা হয় ফাংশনাল অপােরশন । জিডেক ৮ এ এিটেক পিরিচত করােনা
হেয়েছ । অেনকটা ফাংশনাল া ািমং এর মত কেরই িডজাইন করা করা । forEach মথডিট একিট একিট কের
এিলেম াভাস কের যায় এবং তােক য কাজ করেত বলা হয় িঠক সই কাজিটই কের বেস থােক । :D দা ন মজার
এই ফাংশনার অপােরশন ।
কান একিট িল থেক খুব সহেজই একিট ভ ালু িরে স কের দওয়া যায় । set(int index, E element)
মথডিট ২ িট ইনপুর প ারািমটার নয় । থেম য ইনেডে র ভ ালু িরে স করেত হেব সিট এবং তার পের য
অবেজ িদেয় সই ান পূরন করেত হেব সিট।
list.set(2, Integer.MAX_VALUE);
খুব চিলত ২ উপােয় িল থেক কান একিট এিলেম িডিলট বা িরমুভ কের দওয়া যায় । একিট হল কান একিদ
এিলেম বা অবেজ কান ইনেডে আেছ সটা জানা এবং সই ইনেড েক িরমুভ কের দওয়া । অথবা য
অবেয িট িরমুভ করেত চাওয়া হে সই অবেয িট িদেয় বলা সিট িডিলট করেত । চলুন দিখ সিট িকভােব করা
যায়ঃ
প িত ১ঃ
list.remove(2);
এই প িত আপিন ি িমিটভ ইি জার না ার না ার ইনপুট প ারািমটার িহসােব পাস করেছন । অথাৎ remove
মথডিট এিটেক ইনেড িহসােব িবেবচনা করেব । যিদ 2 না ার ইনেডে অন কান না ার থােক এবং ২ িলে
উপি ত থােক তার পেরও স ২ না ার ইনেডে র ভ ালুিটেক িরমুভ করেব এবং ওই ইনেডে র ভ ালুিট িরটান করেব
।
প িত ২ঃ
list.remove(new Integer(13));
এই প িতেত আপনার িল িট য টাইেপর অবেজ কনেটইন করেছ সই টাইেপর একিট অবেজ িদেল সিটেক
িডিলট করার চ া করেব । যিদ উ অবেজ উপি ত থােক িডিলট করেব এবং true ভ ালু িরটান করেব
অন থায় false িরটান করেব ।
clear মথডিট উ িল থেক সব এিলেম িরমুভ কের দয় । contains মথডিট একিট অবেজ ইনপুট
িহসােব নয় এবং চক কের য উ অবেজ ির িলে েজ িক না । indexOf মথসিট একিট অবেজ ইনপুট
িহসােব নয় এবং যিদ সই অবেজ িট ওই িলে েজ থােক তেব তার ইনেড িরটান কের । অন থায় -১ িরটান
কের । sort নামক একিট মথড আেছ যিট ইনপুট প ারািমটার িহসােব ক ােরটর অবেজ িনেয় িল িট সই
অনুযায়ী সট কের ।
এরকম আেরা বশ িকছু মথড এবং তােদর িব র ব াখ া ওরাকেলর অিফিসয়াল ডকুেমে শন সাইেট পাওয়া যােব ।
আ হীরা সখান থেক দেখ িনেত পােরন । িলংকঃ
http://docs.oracle.com/javase/8/docs/api/java/util/List.html
িল সট করা(Sort a List)
কান একিট িল েক সট করার চেয় সহজ িবষয় আর িকছু হেতই পােরনা । তেব সমস া হল একিট িল েক সট
করার নানািবধ উপায় থাকায় আপিন কনিফউজ হেয় যেত পােরন য আসেল ক ন কান প িতেত সট করেবন ।
আিম িনেজও মােঝ মােঝ কনিফউজ হেয় যাই । যাইেহাক আমরা িল সিটং এর এেকবাের বিসক থেক ধীের ধীের
সামেনর িদেক এিগেয় যাব । বেল রাখা ভােলা আমরা এখােন বিসক ািল ২ কােরর সিটং টকিনক দখেবা এবং
তােদর আবার ২ কার সাব সিটং টকিনক দখেবা । আ হীরা আেরা িকছু টা ঘাটাঘািট করেল আেরা অেনক িকছু ই
জানেত পারেব ।
প িত ১ঃ
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
Collections.sort(list);
list.forEach((x) -> {
System.out.println(x);
});
}
}
এখােন আমরা Collections ােসর একিট মথড sort যিট ইনপুট প ারািমটার িহসােব একিট িল অবেজ
নয় এবং সিটেক ইনে স সট কের দয় । অথাৎ এই মথেডর িরটান টাইপ ভেয়ড । এবং এিট অ ােসি ং ( ছাট
থেক মা েয় বড় ) অডাের সট কের ।
আমরা যিদ িডেসি ং অডাের সট করেত চাই তেব আমােদর আেরকটু কাজ বিশ করেত হেব । আর সিট হল
sort নামক মথেড আেরকিট প ারািমটার পাস করেত হেব যিট আসেল একিট Comparator অবেজ । যটার
মাধ েম আমরা বেল িদব য আসেল সটিট কান অডাের হেব বা কান এিলেমে র সােপে হেব । কাডিটেক
সে ে আমরা এভােব িলখেত পারতাম,
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
Collections.sort(list, comparator);
list.forEach((x) -> {
System.out.println(x);
});
}
}
উে খ এখােন Comparator একিট ই ারেফস এবং এবং compare একিট abstract মথড তাই আমােদর
এিটেক ইমি েম করেত হেয়েছ । compare মথডিট একিট ইি জার না ার িরটান কের । দুিট অ াি িবউেটর
মােঝ কে য়ার কের পেজিটভ, নেগিটভ বা ন িরটান কের । ন িরটান করা মােন দুিট সমান । পেজিটভ িরটান
করা মােন থমিট বড় আর অন থায় ছাট । আমরা আলাদা ভােব Comparator এর অবেজ ি েয়ট না কেরও
কাজিট করেত পারতাম ইনে েস । সে ে এরকম হেত পারত,
বতমান সময় যেহতু ল ামডা এ ে শেনর যুগ চলেছ তাই এিটেক আেরা সহেজ এবং খুব সংে েপ এভােবও লখা
যত,
এত ন আমরা দখলাম ি িমিটভ টাইেপর ডাটার একিট িল সট করা । এমনেতা হেতই পাের য আপনার কােছ
একিট কা টাইেপর অবেজ কনেটইন কের এমন একিট িল সট করেত হেব ওই অবেজে র িনিদ কান এক বা
একািধক পািটর সােপে । সে ে করনীয় িক সটা এবার চলুন দেখ ফিল ।
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Employee {
int id;
String name;
int age;
int salary;
list.forEach((x) -> {
System.out.println(x.salary);
});
}
}
িঠক আেগর মতই কাজ করেত পারেবন । তেব এখােন অবেজ িনেয় কাজ করেত হেব । এবং অবেজে র কান
িফে র রসেপে সট করেত চাে ন সটাও িডফাইন কের িদেত হেব । অ ােসি ং বা িডেসি ং যেকান ভােবই সট
করেত পারেব । এমনিক একািধক িফে র রসেপে যিদ সট করেত চান সটাও করেত পারেব । আপনারা চাইেল
ল ামডা এ ে শন ব াবহার করেত পারেতন সে ে এরকম হেতা কাডিট,
এবার আমরা একটু িভ একটা প িত দখেবা । যিদ এমন হয় য আমােদর এই াসিট ায়ই সট করেত হয় এবং
িনিদ একটা অডাের সট করেত হয় , সে ে আমরা একটা িবেশষ কাজ করেত পাির । আমরা Comparable
ই ারেফসিট ইমি েম করেত পাির । Comparable ই ারেফেসর মােঝ compareTo মথডিট অভাররাইড
করেলই কাজ শষ । অ ােসি ং বা িডেসি ং আেগর মতই । তেব চলুন দিখ িকভােব সিট করা যায় সিট দেখ
ফিল ।
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
int id;
String name;
int age;
int salary;
@Override
public int compareTo(Employee t) {
return this.age - t.age;
}
}
Collections.sort(list);
list.forEach((x) -> {
System.out.println(x.id + ", " + x.name + ", " + x.age + ", " + x.salary);
});
}
}
এভােব খুব সহেজই আমরা একিট অবেজে র িল সট করেত পাির । তেব একিট িবষয় ল করার মত িবষয় হে
য আপনােদর য ২ কােরর সট দখােনা হেয়েছ অবেজে র িলে র ে এই দুই কার িক একে ও ব াবহার
করেত পারেবন । তেব সে ে ােয়ািরিট পােব াজার ফাংশন । চলুন দিখ িবষয়টা িক একটু দেখ নই ।
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
int id;
String name;
int age;
int salary;
@Override
public int compareTo(Employee t) {
return this.age - t.age;
}
}
list.forEach((x) -> {
System.out.println(x.id + ", " + x.name + ", " + x.age + ", " + x.salary);
});
}
}
এখােন যিদও Employee াস Comparable ই ারেফস ইমি েম কেরেছ এবং compareTo মথেড বেল
দওয়া হেয়েছ age এর অ ােসি ং অডাের সট করেত হেব িক এিট সট করেব salary এর িডেসি ং অডাের ।
কন সটা করেছ সটা িন য় বুঝেত পেরেছন ।
আপনারা চাইেল িক List এর অ গত sort মথড ব াবহার কেরও সট করেত পারেতন । সটা করার জন খুব
বিশ িকছু ই করেত হতনা । সিট অলেরিড আপনারা জােনন িকভােব সিট করা যায় ।
list.sort(new Comparator<Employee>(){
@Override
public int compare(Employee t, Employee t1) {
return t1.age - t.age;
}
});
বিসক ািল এভােব খুব সহেজই একিট িল সট করা যায় । আপনারা আেরা বিশ আ হী হেল ওরাকেলর
ডকুেমে শন পড়েত পােরন । আেরা বিশ পির ার হেব ধারনা ।
–-------চলেব--------
পাঠ-১৬: ড
ড িক
ড কন াকশন
রােনবল ই ারেফস
ড মথড
ড ই ােরপশান
ড প
ড িজওিলং
ড সইফিট
ড পুল
সারসংে প
পাঠ-১৬: ড 136
বাংলায় জাভা
অনুশীলন # ১
Design a class named Point which will model a 2D point with X and Y coordinates.
7. A method called distance(int x, int y) that returns the distance from this point to
another point at the given (x, y) coordinates.
8. An overloaded distance(Point another) that returns the distance from this point to the
given Point instance another.
For example -
package bd.com.howtocode.java;
/**
* @author Bazlur Rahman Rokon
* @date 6/19/15.
*/
public Point() {
x = 0;
y = 0;
}
অনুশীলন 142
বাংলায় জাভা
@Override
public String toString() {
return "(" + x + ", " + ")";
}
}
Now write a program that allocates 10 points in an array of Point , and initializes to (1, 1),
(2, 2), ... (10, 10).
অনুশীলন 143