چەمکی بەرنامەسازیی تەنخوازی (وانەی دووهەم)

نووسین و وەرگێڕانی: موحەممەد موحەممەدئەمینی

mohammad[at]asosoft[dot]com

چەمکی بەرنامەسازیی تەنخوازی[۱]

تەن بە چی دەگوترێت؟

تێگەیشتن لە واتای تەنەکان[۲] بۆ تێگەیشتن لە تەکنۆلۆژیی تەنخوازی زۆر گرینگە. ئەگەر سەیرێکی دەوروبەری خۆتان بکەن لە جیهانی ڕاستەقینەدا زۆر تەن هەن کە دەتوانن بیانبینن: کتێبەکەتان، تەلەڤیزیۆنەکەتان، سەگەکەتان، پاسکیلەکەتان و زۆر شتی تر.

تەنەکان لە جیهانی ڕاستەقینەدا دوو تایبەتمەندییان هەن: هەموویان دۆخ[۳] و هەڵسوکەوتیان[۴] هەیە. بۆ وێنە سەگەکەتان لە دۆخێکدایە کە لەو دۆخەدا کۆمەڵێک تایبەتمەندی هەن. وەک (ناو، ڕەنگ، موو، برسییەتی) و هەروەها کۆمەڵێک هەڵسوکەوتی هەن وەک (قروسکاندن، شوێنکەوتن، کلک جووڵاندن). پاسیکیلیش هەر بەو شێوەیە لە دۆخێکدایە (دەندەی ئێستاکەی، خێرایی ئێستاکەی، ژمارەی پێدال لە خولەکێکدا) و کۆمەڵێک هەڵسوکەتیشی هەن (گۆڕینی دەندە، لێدانی پێدال، بەکارهێنانی ڕاگر). دەستنیشانکردنی دۆخ و هەڵسوکەتی ئەو شتانەی لە جیهانی دەوربەرتاندا هەن یارمەتیتان دەدات کە تێگەیشتنێکی سەرەتایی لە بەرنامەسازیی تەنخوازی پەیدا بکەن.

هەر ئێستا چاوێک بە دەوربەرتاندا بگێڕن بزانن چ تەنێک لە دەوروبەرتان هەیە. بۆ هەر شتێک کە لە دەورەتان هەیە دوو پرسیار لە خۆتان  بکەن: ‘ئەو تەنە دەتوانێت لە چ دۆخگەلێکدا بێت؟” و “ئەو تەنە دەتوانێت چ هەڵسوکەتێک ئەنجام بدات؟” ئەو شتەی بە خەیاڵتاندا دێت بینووسن. ئێستا دەزانن ئەو شتانەی لە دەوروبەرتاندا هەن دەتوانن زۆر ئاڵۆز بن، ڕەنگە چرای سەر مێزەکەتان تەنیا لە دۆخی کوژاوە یان هەڵکراودا بێت و تەنیا دوو هەڵسوکەتی کوژاندنەوە یان هەڵکردنی بەسەردا جێبەجێ بکرێن، بەڵام ڕادیۆکەتان دەتوانێت چەندین دۆخی هەبن، وەک هەڵکراو، کوژاوە، بەرزیی دەنگ، ئەو وێزگەیەی ئێستا گوێی لێدەگریت و هەروەها چەندین هەڵسوکەوتیشی هەبن وەک هەڵکردن، کوژاندنەوە، زیادکردنی دەنگ، کەمکردنی دەنگ، گەڕان). هەروەها ڕەنگە لەوە تێگەیشتبێتن کە هەندێک لەو تەنانەی دەوروبەرتان لەخۆگری چەند تەنی دیکەن. ئەم نموونانەی کە لە جیهانی ڕاستەقینەدا هەن، دەتوانن لە بەرنامەسازیی تەنخوازیشدا بە کاریان بهێنن.

تەنێکی نەرمامێر

چەمکی تەنە نەرمامێرییەکان[۵] هاوشێوەی تەنەکان لە دنیای ڕاستەقینەدایە: هەردووکیان دوو بەشی دۆخ و هەڵسوکەوتیان هەیە. تەنێک دۆخی خۆی لە بوارەکان[۶] (بگۆڕەکان[۷] لە هەندێک زمانی بەرنامەسازیدا) پاشەکەوت دەکات و هەڵسوکەوتیشی لە مێتۆدەکاندا[۸] (لە هەندیک زماندا پێی دەگوترێت فانکشن[۹]) دەنوێنێت. مێتۆدەکان لەسەر دۆخی ناوەوەی تەنێک کار دەکەن و ئەم کارەش بنەمایەکە بۆ پەیوەندیی تەنێک لەگەڵ تەنێکی تر. دۆخی ناوەوەی تەنێک دەشاردرێتەوە و هەموو کارکردنێک لەگەڵ تەنەکان لە ڕێگەی مێتۆدەکانەوە ئەنجام دەدرێت. ئەم شاردنەوەیە[۱۰] بنەڕەتێکی بناخەییە بۆ بەرنامەسازیی تەنخوازی. بەم کاری شاردنەوەیە دەگوترێت کەپسولەکردن[۱۱].

بۆ وێنە سەیری تەنی پاسکیل بکە:

پاسکیل کە بە شێوەی تەنێکی نەرمامێری مۆدێل کراوە

بە دیاریکردنی دۆخ (خێرایی ئێستاکە، ژمارەی لێدانی پێدال لە ئێستاکەدا، دەندەی ئێستا) و هەروەها بە دابینکردنی مێتۆدەکان بۆ دەستکاریی  ئەو دۆخە، تەنێک لە کۆنترۆڵدایە کە بە چ شێوازێک لە دەرەوەی خۆی بەکار بهێنرێت. بۆ وێنە، ئەگەر پاسکیل تەنیا ٦ دەندەی هەیە، مێتۆدێک دەبێت کۆنترۆڵی ئەوە بکات کە دەندەیەک کەمتر لە ١ یان زیاتر لە ٦ ڕێگەی پێنادرێت.

نووسینی کۆد بە شێوازی کۆمەڵێک تەن، ژمارەیەک قازانجی هەن کە بریتین لە:

  1. پارچەیەتی[۱۲]: دەتوانین کۆدی سەرچاوە[۱۳] بۆ تەنێک بە شێوەی سەربەخۆ لە کۆدی تەنێکی تر بنووسین، پاش ئەوەی کە تەنێک ساز کرا بە ئاسانی دەتوانین لەناو هەموو سیستمدا بە کاری بهێنین.
  2. شاردنەوەی زانیاری[۱۴]: بەو پێیەی کە لە دەرەوەی تەنێک تەنیا لە ڕێگەی مێتۆدەکانەوە لەگەڵ ناو تەنەکە پەیوەندی ساز دەکرێت، شێوازی جێبەجێکردنی مێتۆدەکان لە دەرەوەی ئەو تەنە شاراوەیە.
  3. بەکارهێنانەوەی کۆد[۱۵]: ئەگەر پێشتر تەنێک بوونی هەبێت (ڕەنگە لە لایەن پەرەپێدەرەێکی[۱۶] تری نەرمامێرەوە نووسرابێت)، ئێوە دەتوانن ئەو تەنە لە بەرنامەکەی خۆتاندا بە کار بهێنن. ئەمەش ڕێگەی ئەوەمان پێدەدات کە جێبەجێکردن[۱۷]/تاقیکردنەوە[۱۸]/دیباگ[۱۹] بۆ زۆر تەنی ئاڵۆز کە هەر کامیان کارێکی دیاریکراو ئەنجام دەدەن بە سادەیی ئەنجام بدرێت و ئێوە کۆدێکی بڕواپێکراو کە لە لایەن کەسانی ترەوە بەرهەم هاتووە بە کار بهێننەوە.
  4. Pluggability و سادەیی دیباگکردن[۲۰]: ئەگەر تەنێکی تایبەت کێشەی تێدا هەبێت دەکرێت زۆر بە سادەیی لاببرێت و تەنێکی دیکە دابنرێت لە شوێنی. ئەمە زۆر لە چارەسەردنی کێشە مکانیکییەکان لە جیهانی ڕاستەقینە دەچێت؛ ئەگەر تەگەرێک تەقی یان تاسمەیەک بچڕا زۆر بە سادەیی دەتوانن لەگەڵ دانێکی تر جێگۆڕکێی پێبکرێت.

پۆل[۲۱] چییە؟

لە جیهانی ڕاستەقینەدا، زۆر نموونە لە تەنەکان دەبینن کە وەک یەک دەچن. ڕەنگە هەزاران پاسکیل لە جیهاندا هەبن، هەموویان یەک مۆدێلن و یەک کار ئەنجام دەدەن. هەموو ئەو پاسکیلانەی لە ڕووی داڕشتنێکی تایبەتەوە ساز دەکرێن پارچە پێکهێنەرەکانیان وەک یەکن، بە زمانی بەرنامەسازیی تەنخوازی دەڵێین کە پاسکیلەکەی تۆ نموونەیەکە[۲۲] لە پۆلێک لە تەنەکان کە پێی دەگوترێت پاسکیل. پۆل گەڵاڵە[۲۳] و دیزاینێکە کە تەنەکانی لێ ساز دەکرێن.

ئەم پۆلەی خوارەوە جێبەجێکردنێکە لە پۆلی پاسکیل و دەکرێت بە شێوازی دیکەش جێبەجێ بکرێت:

class Bicycle {    
int cadence = 0;  
int speed = 0;   
int gear = 1;    
void changeCadence(int newValue) {
cadence = newValue;  
}     void changeGear(int newValue) { 
gear = newValue; 
}  
void speedUp(int increment) {  
speed = speed + increment;     
}   
void applyBrakes(int decrement) { 
speed = speed - decrement;  
}
void printStates() {    
System.out.println("cadence:" +cadence + "speed:" +speed + " gear:" + gear);  
}
}

ڕستەسازی و سینتاکسی زمانی بەرنامەسازیی جاڤا نوێیە بۆتان، بەڵام داڕشتنی ئەم پۆلە لەسەر بنەمای باسەکانی پێشووە لەسەر پاسکیل. بوارەکان بریتین لە پێدال، خێرایی و دەندە کە دۆخی ناوەوەی تەنێک پیشان دەدەن و مێتۆدەکان (changeCadence, changeGear, speedUp etc) هەڵسوکەوت لەگەڵ دنیای دەرەوە پیشان دەدەن.

ڕەنگە سەرنجتان دابێت کە پۆلی Bicycle  مێتۆدی main ی نییە، هۆکارەکەشی ئەوەیە کە ئەمە بەرنامەیەکی تەواو نییە و تەنیا گەڵاڵەیەکە کە دەکرێت لە بەرنامەیەکی دیکەدا بە کار بهێنرێت.

لێرەدا پۆلی BicycleDemo  دەبینن کە دوو تەنی جیا لە پۆلی Bicycle  ساز دەکات و مێتۆدەکان بۆ هەرکامیان بانگهێشت[۲۴] دەکات:

class BicycleDemo {
    public static void main(String[] args) {
    // Create two different 
    // Bicycle objects 
    Bicycle bike1 = new Bicycle();  
    Bicycle bike2 = new Bicycle(); 
    // 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();
    }
}

دەرچووی ئەم کۆدە ژمارەی پێدال و خێرایی و دەندە بۆ ئەو دوو پاسکیلە دەگەڕێنێتەوە بۆمان:

cadence:50
 speed:10 
gear:2
cadence:40
 speed:20
 gear:3

 

میراتگری[۲۵] چییە؟

جۆرە جیاجیاکانی تەنەکان زۆربەی کات ژمارەیەک خاڵی هاوبەشیان هەیە، بەڵام جۆری تایبەتتر لەو تەنانە هەن کە ڕەنگە بواری زیادی یان مێتۆدی تایبەت بە خۆیان هەبێت. بۆ وێنە پاسکیلی کەژپێوی، پاسکیلی ناو جاددە، و پاسکیلی دووکەسی هەموویان هەندێک تایبەتمەندیی هاوبەشی پاسکیلیان تێدایە (خێرایی ئیستا، ژمارەی پێدال لە ئێستادا، دەندەی ئێستا). بەڵام هەرکامیان هەندێک تایبەتمەندیی تایبەت بە خۆیان هەن کە لە یەکتر جیایان دەکاتەوە، بۆ وینە پاسکیلی دووکەسی دوو کورسیی هەیە و دوو شوێنی هەیە بۆ دەستگرتن، پاسکیلی ناو جاددە شوێنی دەستگرتنیان چەماوەیە، و هەروەها هەندێک پاسکیلی کەژپێوی زنجیرێکی زیادییان هەیە.

بەرنامەسازیی تەنخوازی، ئەو تواناییەمان پێدەدات کە دۆخ و هەڵسوکەتی هاوبەش لە پۆلێکی ترەوە بە میرات وەربگرین. لەم نموونەیەدا پۆلی پاسکیل دەبێت بە سەرپۆل[۲۶]  (پۆلی گشتیتر) بۆ پۆلەکانی پاسکیلی کەژپێوی (MountainBike)، پاسکیلی ناو جاددە (RoadBike) و پاسکیلی دووکەسی ( TandemBike). لە زمانی جاڤادا پۆلێک دەتوانێت تەنیا یەک سەرپۆلی ڕاستەوخۆی هەبێت و هەر سەرپۆلێک ئەو تواناییەی هەیە کە چەندین پۆل ببن بە ژێرپۆلی[۲۷] (پۆلی تایبەتتر).

پلەبەندیی پۆلەکانی پاسکیل

سینتاکسی سازکردنی ژێرپۆل[۲۸] زۆر سادەیە، لە سەرەتای پێناسەکردنی پۆلەکەتاندا کلیل وشەی[۲۹] extends  دەنووسن، بە دوایدا ناوی ئەو پۆلە دەنووسن کە بە میرات وەردەگیرێت:

 

class MountainBike extends Bicycle {   
    // new fields and methods defining  
   // a mountain bike would go here
 }

 

ئەم کارە ئەو تواناییە دەدات بە پۆلی MountainBike  کە هەموو مێتۆدەکانی پۆلی Bicycleی هەبن. ئێستا لەم پۆلەدا بە تایبەت دەتوانین چڕ ببینەوە لەسەر ئەو تایبەتمەندییانە کە تایبەت بە خودی پۆلی MountainBike ن. ئەمەش دەبێتە هۆی ئەوەی کە کۆدی ژێرپۆلەکانتان بە سادەیی بخوێنرێتەوە.

نێوانەڕوو[۳۰] چییە؟

هەر وەک پێشتر فێر بوون، تەنەکان پەیوەندییان لەگەڵ دنیای دەرەوە لە ڕێگەی مێتۆدەکانەوە ساز دەکەن. مێتۆدەکان نێوانەڕوو و ڕێگەی پەیوەندیی پۆلەکانن لەگەڵ دنیای دەرەوە. بۆ وێنە دوگمەکانی تەلەفزیۆن  نێوانەڕووی تەلەفزیۆنن و لە ڕێگەی ئەوانەوە پەیوەندیی نێوان ئێوە و پارچە ئەلەکتریکییەکانی پشتەوە ساز دەبێت.

نێوانەڕوو لە کۆمەڵێک مێتۆد پێک دێت کە ئەو مێتۆدانە هەنگاوەکانی جێبەجێ بوونیان لە نێوانەڕوودا نایەت و تەنیا پێناسەی مێتۆدەکان لەو بەشەدا دێت.

interface Bicycle { 
    //  wheel revolutions per minute  
    void changeCadence(int newValue); 
    void changeGear(int newValue);   
    void speedUp(int increment); 
    void applyBrakes(int decrement);
}

بۆ جێبەجێکردنی ئەم نێوانەڕووە، دەبێت ناوی پۆلەکەتان بگۆڕێت بۆ جۆرێکی تایبەت لە پاسکیل، و هەروەها پێویستە پاش ناوی پۆلەکە، کلیل وشەی implements  بهێنن و بە دوایدا ناوی نێوانەڕووەکە بهێنن:

class ACMEBicycle implements Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

   // The compiler will now require that methods
   // changeCadence, changeGear, speedUp, and applyBrakes
   // all be implemented. Compilation will fail if those
   // methods are missing from this class.

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

جێبەجێکردنی نێوانەڕوو وا دەکات کە پۆلێک بە شێوەی فەرمیتر ئەو مێتۆدانەی کە دەبێت جێبەجێیان بکات بۆی پێناسە بکرێت. نێوانەڕوو پەیوەندیی نێوان پۆلێک لەگەڵ دنیای دەرەوەدا پێناسە دەکات. ئەم پێناسەیە وەک گرێبەستێک وایە کە دەبێت ئەو پۆلە جێبەجێی بکات و ئەو گرێبەستە لە لایەن کامپایلێرەوە کاتی سازکردنی[۳۱] پڕۆژەکە جێبەجێ دەکرێت. ئەمەش بەو هۆیەیە کە هەر مێتۆدێک لەناو نێوانەڕوویەکدا هاتبێت دەبێت حەتمەن لە لایەن پۆلەکەوە جێبەجێ بکرێت.

 

پەکیج یان بەستە[۳۲] چییە؟

بەستە نەیمسپەیسێکە[۳۳] کە کۆمەڵێک پۆل و نێوانەڕووی پەیوەندیدار بە یەکترییەوە ڕێک دەخات. دەتوانن بەستەکان وەک فۆڵدێرێک سەیر بکەن. دەتوانن وێنەکانتان لە ناو فۆڵدێریکدا، کۆدەکانتان لە ناو فۆڵدێرێکی دیکە و لاپەڕەکانی HTML لە فۆڵدێرێکی هاوبەشکراوی دیکەدا دابنێن. نەرمامێرێکی زمانی جاڤا دەتوانێت لە هەزاران هەزار پۆل پیک بێت بۆیە پێویستە ئامرازێک هەبێت بۆ ئەوەی پۆل و نێوانەڕووە پەیوەندیدارەکان پێکەوە بخاتە ناو بەستەیەک.

سەکۆی جاڤا کتێبخانەیەکی گەورەی لە پۆلەکان بەرهەم هێناون کە ئەم کتێبخانەیە لە کۆمەڵێک بەستەدا ڕێک خراوە. ئەم کتێبخانەیە پێی دەگوترێت نێوانەڕووی بەرنامەسازیی کارپێکەری[۳۴]. پەکیجەکانی ئەی.پی.ئای لەخۆگری ئەو پۆلانەیە کە کاری گشتییان لە بەرنامەسازیدا پێدەکرێت و بۆ زۆربەی شوێنەکان پێویستن. بۆ وێنە تەنێک لە پۆلی String لەخۆگری ئەو دۆخ و هەڵسوکەوانەیە کە لەگەڵ زنجیرەیەک لە کارەکەتێرەکان دەکرێن. تەنێک لە پۆلی File  توانایی دروستکردن، سڕینەوە، دەستکاری و هەڵسەنگاندن، پشکنین لە پەڕگەیەکدا[i] بە بەرنامەساز دەدات کە ئەم کارانە لەسەر سیستمێکی پەڕگە[۳۵] ئەنجام بدات. تەنێکی Socket   توانایی دروستکردن و بەکارهێنانی سووکێتەکان[۳۶] دەداتە بەرنامەساز، زۆر تەن بۆ GUI هەن کە نێوانەڕووی گرافیکیی بەکارهێنەریان[۳۷] پێ ساز دەکرێت. ئەم پۆلە بەربڵاوانە ڕێگەی ئەوە دەدەن بە بەرنامەساز کە لەجیاتی ئەوەی بیر لە سازکردنی ژێرخانە پێویستەکان بکاتەوە زیاتر لەسەر خودی بەرنامەی کارپێکەری جەخت بکاتەوە و ئەو پۆلانە لە بەرنامەکاندا بەکار بهێنێت.

دەتوانن لە ڕێگەی بەستەری Java Platform API Specification  زانیاریی زیاتر لەسەر هەموو بەستەکان، نێوانەڕووەکان، کلاسەکان، بوارەکان و مێتۆدەکان بخوێننەوە کە سەکۆی Java SEە. ئەم لاپەڕەیە دەتوانێت گرینگترین سەرچاوە بێت لە کاتی بەرنامەسازیتان بە زمانی جاڤا.

پرسیارەکان و ڕاهێنانەکانی بەشی چەمکی بەرنامەسازیی تەنخوازی

پرسیارەکان

  1. تەنەکان لە جیهانی ڕاستەقینەدا دوو بەشی … و …یان هەیە.
  2. دۆخی تەنێکی نەرمامێری لە ….دا پاشەکەوت دەکرێت.
  3. هەڵسوکەوتی تەنێکی نەرمامێری لە ڕێگەی …ەوە پیشان دەدرێت.
  4. شاردنەوەی دراوەی ناوەوە لە جیهانی دەرەوە و دەستڕاگەیشتن پێی تەنیا لە ڕێگەی ئەو مێتۆدانەی بە شێوەی گشتی پێناسە کراون پێی دەگوترێت ….
  5. گەڵاڵەی تەنێکی نەرمامێری پێی دەگوترێت ….
  6. هەڵسوکەتێکی باو دەتوانێت لە …دا پێناسە بکرێت و لە …دا لە ڕێگەی کلیل وشەی … بە میرات وەربگیرێت.
  7. کۆمەڵەیەک لە میتۆدەکان بەبێ ئەوە جێبەجێ کرابێتن پێیان دەگوترێت ….
  8. نەیمسپەیسێک کە پۆلەکان و نێوانەڕووەکان ڕێک دەخات پێی دەگوترێت ….
  9. کورتەناوی API کورتکراوەی …ەیە.

ڕاهێنانەکان

١. بۆ چەند دانە لەو تەنانەی لە دەوروبەرتاندا هەن، پۆلێک بنووسن. بۆ بیرهاتنەوەی سینتاکس سەیری پۆلی Bicycle بکەن.

٢. بۆ هەرکام لەو پۆلە نوێیانەی کە دروستتان کردوون نێوانەڕوویەک دروست بکەن تاکوو هەڵسوکەوتەکانی ئەو پۆلەی تێدا پێناسە بکەن، پاشان هەوڵ بدەن پۆلەکەتان ئەو نێوانەڕووە جێبەجێ بکات. یەک یان دوو مێتۆد کە لە نێوانەڕووەکەدا هەن لە پۆلەکەتاندا جێبەجێی مەکەن، بزانن چ هەڵەیەک ڕوو دەدات؟

 

[۱] object oriented

[۲] object

[۳] state

[۴] behavior

[۵] software objects

[۶] field

[۷] variable

[۸] methods

[۹] function

[۱۰] encapsulation

[۱۱] encapsulation

[۱۲] modularity

[۱۳] source code

[۱۴] information encapsulation

[۱۵] code reuse

[۱۶] developer

[۱۷] implement

[۱۸] test

[۱۹] debug

[۲۰] debugging

[۲۱] class

[۲۲] instance

[۲۳] blueprint

[۲۴] invoke

[۲۵] inheritance

[۲۶] superclass

[۲۷] subclass

[۲۸] subclass

[۲۹] keyword

[۳۰] interface

[۳۱] build

[۳۲] package

[۳۳] namespace

[۳۴] the “Application Programming Interface”, or “API”

[۳۵] file system

[۳۶] socket

[۳۷] graphical user interface

[i] file