መደባዊ ዝምድና (Class Relationship)8.1 ምዕላደ-ቃላት
8.2 መግቢያበፕሮግራም ዓለም ውስጥ ጊዜ ከምናባክንባቸው አንዱ፥ ለተናጠል መፍትሔዎች በተደጋጋሚ የምንጽፈው ኮድ ነው። ይህ የጠና ችግር ከመሆኑ የተነሳ አያሌ መፍትሔ ነክ መንገዶች በየጊዜው ይቀርባሉ። በመደባዊ የፕሮግራም ቋንቋዎች በኩል ይኸን ችግር ለመቀነስ ይረዳ ዘንድ አንድ መደብ ሌላውን ወርሶ የባለቤትነት መብት እንዲኖረው ይፈቅዳሉ። በአሁኑ ጊዜ፥ ተግባራዊ ፕሮግራም እንጻፍ ካልን፥ በቀጥታም ሆነ በተዘዋዋሪ መንገድ፥ በሌሎች ፕሮግራሞች ላይ መመካቱ አይቀርም። በአያሌ ሁኔታዎች ውስጥ፥ ከውጭ የሚመጡ መደቦችን እንድንወርስ እንገደዳለን። ለዚህ በቂ ምሳሌ ይሆን ዘንድ የጃቫ ሰርቭለት ኤ/ፒ/አይ (Java Servlet API) እንጥቀስ። ይህ ኤ/ፒ/አይ ለዌብ (web) በቀላል መንገድ ፕሮግራም የምንጽፍበት አካባቢ ነው። በግል እንጻፍ ብንል ወራት ወይም ዓመታት ሊወስዱብን የሚችሉ ሥራዎችን በነፃ ይለግሰናል። ሌሎችም ምክንያቶችም አሉ። ኤ/ፒ/አይ ራሱን የሚለግሰው ተጠቃሚው መደብ የHttpServlet መደብን እንዲወርስ በማስገደድ ነው። ራሱን ተወራሽ በማድረግ ከተጠቃሚው መደብ ጋር ባለበቴነትን እንደመጋራት። ከዚህ የምንገነዘበው፥ በአንዳንድ ሁኔታዎች ውስጥ የተሰጠን መደብ ሳንወርስ በቀላሉ ፕሮግራም መጻፍ እንደማንችል ነው። የመደብ ዝምድና ጥቅም በዚህ ብቻ አይወሰንም። በቡድን ፕሮግራሞችን ለመጻፍ ቀጥሎ ለመገንባት ማለትም ንድፎችን በመልክ ከፋፍሎ፥ ድርሻዎችን ለያንዳንዱ የቡድን አባል ደልድሎ፥ በተናጠል ኮዶችን ጽፎና ፈትኖ፥ በመጨረሻ ሁሉንም በአንድ አደራጅቶ የመጨራሻውን ፕሮግራም ለማውጣት እጅግ አመቺ ነው። 8.3 መደባትን በውርስ ማዛመድበሁለት መደቦች መካከል ዝምድና ከምንፈጥርባቸው መንገዶች አንዱ ውርስ ነው። በዚህ ዝምድና አንደኛው መደብ ወራሽ፥ ሌላኛው አውራሽ ይሆናሉ። ወራሹ መደብ ሁልጊዜ ዝምድናውን የመመሥረት ኃላፊነት አለበት። በሂደቱ፥ ተወራሹ መደብ ምንም ዓይነት እርምጃ መውሰድ የለበትም። ዝምድናው፥ ወራሽ መደብን የተወራሹን ተውላጠ-ቃላት፥ መላዎች፥ እንዲሁም ውስጣዊ መደቦች በቀጥታ ማየትና እንደራሱ አድርጐ የመጠቀም መብት ይሰጠዋል። ተወራሹ የግል (private) ብሎ የሰየማቸው አባላት ግን በፍጹም ማየት ወይም መንካት አይችልም። በprivate ፍቃድ ሥር ያሉ የመደብ አባላት ከባለቤታቸው ክልል ውጭ አይታዩም። ለወራሽ መደብ ጨምሮ። አንድ መደብ ሌላ መደብ እንዲወርስ ከተፈለገ፥ በመደቡ ድንጋጌ ጊዜ የextendsን ቃል በመጠቀም ዝምድናውን እንመሠርታለን። አጻጻፉ እነሆ፦ ቀጥለን የውርስ ዝምድናን አጻጻፍ በተግባራዊ ምሳሌ እንመለከታለን። ሁለት መደቦች አሉ፦ Super እና Sub። ወራሹ Sub ሲሆን ተወራሹ ደግሞ Super ነው። የSubን መደብ በጥንቃቄ ከተመለከትን፥ የት ቦታ ላይ ራሱን ከተወራሹ መደብ ጋር እንደሚያዛምድ እናገኛለን። ዝርዝሩን ከኮዱ በታች እንጐብኝ።
ይህ ምሳሌ፥ በተወሰነ ደረጃ ቢሆንም አንድ መደብ ሌላውን እንዴት እንደሚወርስና እንደሚጠቀም ያሳያል። የደመቁትን ቃሎች በተርታ እናብራራ።
8.4 ሁሉም መደቦች ወራሽ ናቸውወደደም ጠላም፥ ማንኛውም የጃቫ መደብ፥ ቢያንስ አንድ መደብ የመውረስ ግዳጅ አለበት። ስለዚህ ማንኛውም መደብ ወራሽ ነው። ይህ አባባል ጥብቅ ጥያቄ ያስነሳል። እስካሁን ያየናቸው ምሳሌዎች (ከላይኛው በስተቀር) ሌላ መደብ ሲወርሱ ወይም ሙከራ ሲያደርጉ አላየንም። በአንድ በኩል ማንኛውም መደብ ወራሽ ነው እያልን፥ በሌላ በኩል ደግም ያንን ቃል የሚሽር ምሳሌዎች ስንመለከት ሰንብተናል። በእርግጥ ቅራኔ አለ ወይስ የማናውቀው ምሰጢር? አንድ መደብ ሌላ ሳይወርስ ራሱን መደንገጉ ከታወቀ፥ የጃቫ ኮምፓይለር በራሱ የመደቡን ድንጋጌ በማደስ ከObject መደብ ጋራ የወራሽና የተወራሽ ዝምድና ይፈጥራል። ድርጊቱ የሚፈጸመው በኮምፓይሌሽን ወቅት ነው። በምዕራፍ ፫ የቀረበ ምሳሌ ኮምፓይል ከመደረጉ በፊትና በኃላ እርቃነ-ሥጋውን ምን እንደሚመስል ተከታዩ ቃል ያሳያል። ወራሽነቱን በራሱ የማያስቀምጥ መደብ፦
public class UnicodeChar { ወራሽ መደብ እንዲሆን በጃቫ ከተገደደ በኃላ፦
public class UnicodeChar extends java.lang.Object { በጃቫ ሕግ መሠረት፥ ቢያንስ አንድ መደብ የObjectን መደብ የመውረስ ግዳጅ አለበት። በመሆኑም፥ የObject መደብ ለሁሉም ተወራሽ መደብ ነው። በቀጥታ ወይም በተዘዋዋሪ እሱን የማይወርስ ወይም የማይዛመድ መደብ የለም። ይህ ዝምድና እስካሁን ድረስ ያልተጠቀሰ ተጨማሪ ጥቅም አለው። የObject ተውላጠ-ቃል የማንኛውንም የመደብ ርቢ የማዘል ችሎታ አለው። ለምሳሌ፥ ልዩ ልዩ የመደብ ርቢዎችን ሊጠብቅ የሚችል ኧሬይ መፍጠር የምንሻ ከሆነ የObjectን መደብ መጠቀም አለብን።
Object[] misc = new Object[11] ; ይህ ባይሆን ኖሮ ለእያንዳነዱ መደብ የራሱን አምሳል ኧሬይ መፍጠር እንገደድ ነበር። በሰፊው ከሚታወቁት የዴታ ማደረጃ ስልቶች መካከል አንዱ «ኧስታክ» (Stack) ሲሆን የObject መደብን ልማትና አጠቃቀም በትንሹ ለማሳየት ይረዳ ዘንድ እዚህ በምሳሌነት ቀርቧል። ይህ ባለኧስታክ (Stack) ኮድ አንባቢው ሌላ ቦታ ካየው ከተለየ ግር ሊሰኝ አይገባም፤ አነስተኛ ልዩነት እዚህም እዚያ ይኖራልና።
8.5 ጃቫ ኧንተርፌስ (Java Interface)የጃቫ ኧንተርፌሶች ከመደብ ጋር ይመሳሰላሉ፥ ነገር ግን ማቀፍ በሚችሏቸው አባላት ጥብቅ መሠረታዊ ይለያሉ። በራሳቸው የመቆም ወይም የመንቀሳቀስ ብቃት የላቸውም። አባሎቻቸው፥ የመላ አዋጆች፥ ቋሚና ኧስታቲክ ተውላጠ-ቃላት ናቸው። የመላ አዋጅ ስንል፥ ድንጋጌ የሌለው፥ በድርብ-ሰረዝ (;) የተቋጨ የመላ ራስጌ ማለታችን ነው። አባሎቻቸው ሁልጊዜ ገሀድና ለማንኛውም የውጭ መደብ ሆነ ኧንተርፌስ ከፍት ናቸው። ኧንተርፌሶች ለዝምድና ሁልጊዜ ዝግጁዎች ናቸው። ተፈጥሯዊ ባሕሪያቸው እንዲሉ። ሌላ መደብ ወስዶ ተግባራዊ ካላደረጋቸው፥ በፍጹም ዋጋ የላቸውም። አብይ ዓላማቸው፥ በማይተዋወቁ መደቦች፥ እንዲሁም ፕሮግራሞች መካከል ድልድይ መፍጠር ነው። የጃቫ ኤ/ፒ/አይ ለዚህ በከፍተኛ ደረጃ ይገለገላቸዋል። የኧንተርፌስ ዝምድና ቃል አገባብ፦ የኧንተርፌስ አደነጋግና አጠቃቀም ምሳሌ፦
ይህ ኮድ አንድ ኧንተርፌስና መደብ አሉት። በሁለቱ አካሎች መካከል ዘምድና አለ። የPiano መደብ የimplementsን ቃል በመጠቀም እሱ ትርጕም አቅራቢ፥ የInstrument ኧንተርፌስ ግን ተተርጓሚ ሆነው ዝምድናው ይመሠረታል። በዚህ ዝምድና ወይም ግንኙነት፥ የPiano መደብ በኧንተርፌሱ ውስጥ የታወጁትን መላዎች በሙሉ የመደንገግ ወይም ሙሉ ሕይወት የመስጠት ግዳጅ አለበት። ማንኛውም መደብ ከአንድ ወይም ከብዙ ኧንተርፌሶች ጋር በቀጥታ መዛመድ ይችላል። ይህ ፍቃዳዊ ነው። ግዳጅ የለበትም። በአንጻሩ፥ መደቦች ግን በቀጥታ ከአንድ መደብ በላይ መውረስ ወይም ራሳቸውን ማዛመድ አይፈቀድላቸውም። |
||||||||||||||||||||||||||||||
Copyright © 2002-2005 Senamirmir Project