መደባት (Classes)7.1 ምዕላደ-ቃላት
7.2 መግቢያከጃቫ የዴታ ዓይነታት መካከል አንዱ መደብ መሆኑን በምዕራፍ ፫ ተጠቍሟል። በዚህ ክፍል ስለ መደብ በሰፊው እንወያያለን። መደብ/ባት ስንል የጃቫ ፕሮግራም፥ የጃቫ ፕሮግራም ስንል መደብ/ባት ማለታችን ነው። መደባት የጃቫን መዋቅርና ቅርጽ እንዲሁም ገጸ-ባሕሪይና ተግባራት ይደነግጋሉ። በዚህ ክፍል የምናተኩረው በመደብ አባላቶች ላይ ነው። ስለመደብ ዓይነቶችና ግንኙነታቸው በሚቀጥለው ምዕራፍ እንደርስበታለን። የመደብ ቃል አገባብ፦ 7.3 የመደብ ዓይነታትየጃቫ የመደብ ዓይነቶች በአራት መልክ ሊታዩ ይችላሉ። በተጨባጥ የመደብ ዓይነት ላይ አተኩረን ሌሎቹን በመጥቀስ እናልፋለን።
7.4 የመደብ አባላትየመደብ አባላት፥ ባሕሪይን፥ ተግባራትንና፥ ግንኙነትን ይገልጻሉ። የመደቡን ምን ማንነት ይመሰርታሉ። የአባላቱ ዓይነትና መጠን በአንድ በኩል እንደ ችግሩ፥ በሌላ እንደ ፕሮግራም ጸሐፊው ነው። የአባላት ዓይነታት እነሆ።
7.5 አባል ተውላጠ-ቃላት (Fields)አባል ተውላጠ-ቃላት የአንድን መደብ ባሕሪይ ይገልጻሉ። የመደቡን ዴታዎችንና የመደብ ርባታዎችን ይጠብቃሉ። ዓይነታቸው መሠረታዊ ዴታና የመደብ ርባታዎች ይጨምራሉ። በመደባቸው ውስጥ አባል የሆኑት መላዎች (methods) በቀጥታ ማየትና መጠቀም ይችላሉ።
ይህ መደብ አራት ተውላጠ-ቃል አባላት አሉት። እንዚህን ተውላጠ-ቃላት ልዩ ልዩ ዴታዎች ለመጠበቅ፥ ለማቆየት፥ ለማሻሻል፥ ለመጻፍና ለመሠረዝ የሚገለገላቸው ናቸው። ሁለቱ የString መደብ ርበታ ሲሆኑ የቀሩት ግን የኢንትጀር መሠረታዊ ዴታ ዓይነት ናቸው። በተጨማሪ ሁሉም መነሻ ዋጋ ተሰይመዋል፤ ነገር ግን ይህ የግድ መደረግ የለበትም፤ አማራጭ ነው። አንድ ተውላጠ-ቃል ሲፈጠር፥ መነሻ ዋጋ ቢሰይምም ባይሰየምም፥ ጃቫ በራሱ መነሻ ዋጋ ሁሉጊዜ አስቀድሞ ይሰይማል። ተውላጠ-ቃላቱን በማጽዳት ለሥራ እንደማዘጋጀት። 7.6 ኮንስትራክትሮች (Constructors)እስካሁን ድረስ ባሉት የጥናት ክፍሎች ኮንስትራክተሮችን በቀጥተኛ መንገድ መደቦች ውስጥ አስገብተን አልተጠቀምንም። በሌላ በኩል ግን፥ ማንኛውንም መደብ ያለኮንስትራክተር መገንባትና መጠቀም በፍጹም አይቻልም። ይሁን እንጂ፥ እስካሁን ድረስ የተሰጡት ምሳሌዎች በሚገባ ሠርተዋል፤ ይሠራሉ። ይህ እንዴት ሊሆን ይችላል? እውነቱ ምንድን ነው? ይኸን ጥያቄ ለመመለስ መጀመሪያ ኮንስትራክተር ምንድን ነው የሚለውን ጥያቄ እንመርምር። በጃቫ ሕግ መሠረት የማንኛውም መደብ ርቢዎች (objects) ሲፈጠሩ፥ አንድ ጊዜ ብቻ ራሳቸውን የሚጠሩ «ልዩ መላዎች» ናቸው። ኮንስትራክተሮችና መላዎች በመሠረቱ ተመሳሳይ ናቸው፤ ነገር ግን ጥቂትና ጥብቅ ልዩነት አላቸው። ኮንስትራክተሮች የመደብ ርቢዎች ቅድሚያዊ ዝግጅት እንዲያደርጉ ዕድል ይሠጣሉ። በነሱ ውስጥ፥ የመደብ ርቢዎች የግል ተውላጠ-ቃላታቸውን መነሻ ዋጋ ይሰይማሉ፤ ራሳቸውን ለሥራ ያዘጋጃሉ ወይም ቀዳሚ ተግባራትን ይፈጽማሉ። የኮንስትራክተሮች ቃል አገባብ፦ እንደመደቦች የኮንስትራክተሮች ሚና ይለያያል። አንድ መደብ በኮንስትራክተሩ ውስጥ ምንም ሥራ ማካሄድ ካልፈለገ፥ የኮንስትራክተሩን ሰውነት ባዶ መተው አንዱ አማራጭ ነው።
ይህ ምሳሌ እንደሚያሳየው፥ ኮንስትራክተሮች ስማቸውን ከባለቤት መደባቸው ይወርሳሉ። ይህ ኮንስትራክተር ሁለት ዕሴቶችን ተቀብሎ ሁለቱን አባል ተውላጠ-ቃላት ያድሳል። ወደ ሥራ ስሚሪቱ በጥሪ ላይ የተመሰረተ ሆኖ ጥሪው የሚመጣው መደቡ ሲራባ ብቻ ነው። ተከታዩ ቃል አንድ የኮንስትራክተር ጥሪ ያመነጫል። SimpleTokenizer st = new SimpleTokenizer("a+b", "+") ;
ከላይ ላነሳነው ጥያቄ መልሱ ይህ ነው። አንድ መደብ የራሱን ኮንስትራክተር ካልደነገገ፥ የጃቫ ኮምፓይለር የራሱን ኮንስትራክተር ይከታል። ይህ ኮንስትራክተር በእንግሊዘኛ default constructor ብለው ይጠሩታል። ስለኮንስትራክተሮች ያጻጻፍና ያሠራር ሕግ ጥቂቶቹን ባቻ መንካታችን ግልጽ ቢሆንም፥ መዘለል ከሌላባቸው መካከል አንዱ ኮንስትራክተሮችን በቀጥታ መጥራት በፍጹም አይፈቀድም። በተደጋጋሚ እንደተጠቀሰው፥ በአንድ የመደብ ርቢ ሕይወት ውስጥ አንድ ጊዜ ብቻ ራሳቸውን ይጠራሉ። እሱም በመደቡ የርባታ ሂደት ውስጥ ነው። 7.7 መላዎች (Methods/Functions)መደባዊ የሆኑ የፕሮግራም መጻፊያ ቋንቋዋዎች፥ ተከታታይ መመሪያ በሥራ ላይ አዋይ አካሎቻቸውን መላዎች (methods/functions/operations) ብለው ይጠሯቸዋል። መደቦች ያለመላዎች በዙ ርቀው መሄድ አይችሉም። በአባል ተውላጠ-ቃላት ባሕሪያቸውን ይገልጻሉ፤ ነገር ግን ተግባሮቻቸውን በመላዎቻቸው ያከናውናሉ። ከሞላ ጐደል የጃቫ ፕሮግራም ሥራዎች የሚከናወኑት በመላዎች ነው። የመላዎች ቃል አገባብ፦ መላዎች የራሳቸው የሆነ ስም፥ ሰውነት፥ መገናኛ ዘይቤ አላቸው። ለሥራ ሁልጊዜ በስም መጠራት አለባቸው። ሥራቸውን ካጠናቀቁ በኋላ፥ ሂደቱን ለጠሪው ይመልሳሉ። ከሌላ መደብ ሆኖ ለመጥራት፥ ባለቤት መደባቸውን ማራባት ወይም በሱ ሥር መሄድ የግድ ነው። መላዎች ዴታ መረከብና መመለስ ይችላሉ። መላዎች ሁልጊዜ በመደብ ሥር መኖር አለባቸው። ራሳቸውን ችለው መቆም አይፈቀድላቸውም። ያሉበት መደብ ባለቤታቸው ነው። አንድ መደብ ዚሮ ወይም ብዙ መላዎች የመደንገግ ችሎታው የተጠበቀ ነው።
ምንም እንኳን ይህ ኮድ ረዥም ይሁን እንጂ፥ የመላዎችን አጻጻፍና አቋቋም፥ እንዲሁም አጠራር ያሳያል። ሦስት መላዎች፦ nextToken(..)፥ getIndex(..)፥ እና main(..) አሉ። የmain(..) መላ የፕሮግራሙ መነሻ ወይም መንደርደሪያ ቃል ነው። በstatic ቃል የተደነገጉ መላዎች ባለቤት መደባቸው ርቢ ውስጥ ሳይገባ ለጥሪ ዝግጁ ናቸው። ለምሳሌ፥ የMath መደብ አያሌ የእስታቲክ መላዎች አሉት፤ ስለዚህ የሱን ርቢ ሳናወጣ በቀጥታ ቀጥሎ እንደሚታየው የእስታቲክ መለዎችን መጥራት እንችላለን። double result = Math.exp(10) ; የሜይን (main) መላ እስታቲክ በመሆኑ፥ እስታቲክ ያልሆኑትን መላዎች በቀጥታ መጥራት አይፈቀድለትም። «ያለእስታቲክ» መላዎች ግልጋሎታቸውን የሚለግሱት ለመደብ ርቢዎች ብቻ ነው። ስለሆነም የሜይን መላ ጥሪ ከማቅረቡ በፊት የመደብ ርቢ ማውጣት ነበረበት። ከዛ በኋላ ነበር የሜይን መላ ሌሎቹን መላዎች መጥራት የቻለው። ያጠራሩ ቃል ከላይ እንደሚታየው እንዲህ ነበር ። token = st.nextToken() ; «ያለእስታቲክ» መላዎች እርስበራሳቸው ይጠራራሉ። «ባለእስታቲክ» መላዎችም እንደዚሁ። ባለእስታቲክ መላዎች ያለእስታቲክ መላዎችን በቀጥታ መጥራት አይፈቀድላቸው እንጂ፥ ያለአስታቲኮቹን ግን መጥራት ይፈቀድላቸዋል። ለምን የሚለውን ጥያቄ ለአንባቢው። 7.8 ፍቃዶችና ዓይነታቸውማንኛውም የመደብ አባል የፍቃድ ደረጃ አለው። ፍቃዱ የአባሉን እይታ እስከየት ድረስ እንደሆነ ይወስናል። አራቱ የፍቃድ ዓይነቶችና እይታቸው በሚከተለው ሠንጠረዥ አለ።
ዓላማው ሌሎች መደቦች የአንድን መደብ አባላት እስከየት ደረጃ ድረስ ማየትና መጠቀም እንደሚችሉ ለመቆጣጠር ነው። ይህ ራሱን ለውጭ መደቦች አሳልፎ የማይሰጥ ፕሮግራም ለመጻፍ ይረዳል። የቅንነት ስህተትን ይቀንሳል።
ይህ ምሳሌ ሁለት መደቦች አሉት። የNeighbor መደብ ጥብቅ የፍቃድ ዓይነት ይጠቀማል። የውጭ መደቦች ይኸንን መደብ ማራባት በፍጹም አይችሉም፤ ነገር ግን፥ ራሱ የሚፈጥረውን ርቢ መጠየቅና ያንን ብቻ መጠቀም ይችላሉ። አንባቢው በቅርብ ኮዱን ይመረምረው ዘንድ ዝርዝሩ ተዘሏል። |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © 2002-2005 Senamirmir Project