المزيد من التعميم

كمثال آخر عن التعميم، تخيل أنك أردت برنامجاً يطبع جدول الضرب بأي قياس، ليس فقط جدول 6×6. يمكنك إضافة معامل إلى printMultTable:

كود:
public static void printMultTable (int high) {
  int i = 1;
  while (i <= high) {
    printMultiples (i);
    i = i + 1;
 }
}
استبدلت القيمة 6 بالمعامل high. إذا استدعيت printMultTable مع المتحول 7، سأحصل على
1 2 3 4 5 6
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24
5 10 15 20 25 30
6 12 18 24 30 36
7 14 21 28 35 42
وهو جدول جيد، عدا أنني أريده أن يكون مربعاً (له نفس العدد من الأسطر والأعمدة)، ما يعني إضافة معامل آخر إلى printMultiples، لتحديد عدد الأعمدة التي يجب أن يحتوي عليها الجدول.
فقط لأنني أريد أن أكون مزعجاً، سأدعو هذا المعامل high أيضاً، لأوضح أن العمليات المختلفة يمكن أن تملك معاملات لها نفس الاسم (تماماً مثل المتغيرات المحلية):
كود:
public static void printMultiples (int n, int high) {
  int i = 1;
  while (i <= high) {
    System.out.print (n*i + " ");
    i = i + 1;
  }
  newLine ();
}
 
public static void printMultTable (int high) {
  int i = 1;
  while (i <= high) {
    printMultiples (i, high);
    i = i + 1;
  }
}
لاحظ أنه عند إضافة المعامل الجديد، اضطررت إلى تغيير السطر الأول من العملية، كما اضطررت أيضاً إلى تغيير المكان الذي تم استدعاء العملية printMultiples فيه. كما هو متوقع، سيولد هذا البرنامج جدول 7×7 مربع:
1 2 3 4 5 6 7
2 4 6 8 10 12 14
3 6 9 12 15 18 21
4 8 12 16 20 24 28
5 10 15 20 25 30 35
6 12 18 24 30 36 42
7 14 21 28 35 42 49
عندما تعمم عملية ما بشكل مناسب، غالباً ما ستكتشف أن البرنامج الناتج يملك قدرات لم تكن تقصدها. مثلاً، لربما لاحظت أن جدول الضرب متناظر، لأن ab = ba، لذا فإن كل المدخلات في الجدول تظهر مرتين. يمكنك توفير الحبر بطباعة نصف الجدول فقط. لعمل ذلك، عليك تعديل سطر واحد فقط من العملية printMultTable. عدل
كود:
printMultiples (i, high);
إلى
كود:
printMultiples (i, i);
وستحصل على
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
سأترك لك مهمة اكتشاف كيفية حصول ذلك.