البرمجة

المصفوفات والدوال في جافا

المصفوفات والدوال في جافا، طرق التحويل بين أنواع البيانات، ولمحة عن الأصناف والوراثة

تُعتبر لغة البرمجة جافا (Java) واحدة من أكثر اللغات استخداماً في العالم بفضل بنيتها القوية وتعدد استخداماتها في تطوير التطبيقات من الهواتف المحمولة إلى الأنظمة الكبيرة. وتعتمد جافا على المفاهيم الأساسية للبرمجة الكائنية التوجه (OOP)، كما توفر أدوات قوية للتعامل مع المصفوفات والدوال (الطرق)، بالإضافة إلى نظام صارم لأنواع البيانات والتحويل بينها. في هذا المقال، سيتم تناول هذه المفاهيم بالتفصيل، بدءًا من المصفوفات، مرورًا بالدوال، ثم طرق التحويل بين الأنواع، وأخيرًا لمحة شاملة عن الأصناف (Classes) والوراثة (Inheritance) في جافا.


المصفوفات في جافا (Arrays)

تعريف المصفوفة

المصفوفة في جافا هي بنية بيانات خطية تُستخدم لتخزين مجموعة من العناصر من نفس النوع في موقع متصل من الذاكرة. يمكن اعتبارها كحاوية تحتوي على عناصر مرقمة بترتيب محدد.

إعلان وتهيئة المصفوفة

يتم إعلان المصفوفة باستخدام الصيغة التالية:

java
int[] numbers; // إعلان فقط numbers = new int[5]; // إنشاء مصفوفة بطول 5

كما يمكن تهيئة المصفوفة مباشرة:

java
int[] numbers = {1, 2, 3, 4, 5};

الوصول إلى عناصر المصفوفة

يتم استخدام الفهرس (Index) للوصول إلى العناصر، مع العلم أن الترقيم يبدأ من الصفر:

java
System.out.println(numbers[0]); // يطبع 1 numbers[2] = 10; // تغيير القيمة في الموقع الثالث

التكرار عبر المصفوفة

java
for (int i = 0; i < numbers.length; i++) { System.out.println(numbers[i]); }

كما يمكن استخدام حلقة “for-each”:

java
for (int number : numbers) { System.out.println(number); }

المصفوفات متعددة الأبعاد

java
int[][] matrix = { {1, 2, 3}, {4, 5, 6} }; System.out.println(matrix[1][2]); // يطبع 6

الدوال (الطرق) في جافا

تعريف الدوال

في جافا، تُعرف الدوال باسم methods وهي كتل برمجية تُستخدم لتنفيذ تعليمات معينة. تُساعد الدوال في إعادة استخدام الكود وتنظيمه بشكل أفضل.

إنشاء دالة

java
public static int sum(int a, int b) { return a + b; }

استدعاء دالة

java
int result = sum(5, 10); // النتيجة هي 15

أنواع الدوال

  • دوال لا تُعيد قيمة: تستخدم الكلمة المفتاحية void

  • دوال تُعيد قيمة: تحدد نوع القيمة المرجعة مثل int, String, إلخ.

  • دوال بوسائط متعددة

  • دوال بدون وسائط

الدوال الثابتة (Static) وغير الثابتة

  • الدوال الثابتة تُستدعى باستخدام اسم الصنف مباشرة.

  • الدوال غير الثابتة تتطلب إنشاء كائن (Object).

java
public class MathUtils { public static int multiply(int x, int y) { return x * y; } }

التحويل بين أنواع البيانات في جافا (Type Conversion)

التحويل الضمني (Widening)

يحدث تلقائيًا عندما يكون النوع المستهدف أكبر حجمًا:

java
int x = 10; double y = x; // تحويل ضمني من int إلى double

التحويل الصريح (Narrowing)

يتطلب تدخل المبرمج وقد يؤدي إلى فقدان البيانات:

java
double a = 9.7; int b = (int) a; // التحويل سيؤدي إلى ب = 9

تحويل البيانات بين أنواع غير متوافقة

  • يمكن استخدام دوال parse وvalueOf لتحويل النصوص إلى أرقام:

java
String s = "123"; int number = Integer.parseInt(s); // 123

التحويل من عدد إلى سلسلة نصية

java
int num = 100; String str = String.valueOf(num); // "100"

التحويل بين أنواع مرجعية

عند العمل مع الأصناف والوراثة، يمكن استخدام التحويل الصاعد (Upcasting) والتحويل الهابط (Downcasting):

java
Animal a = new Dog(); // Upcasting Dog d = (Dog) a; // Downcasting (يتطلب تحققًا)

الأصناف والوراثة في جافا

ما هو الصنف (Class)؟

الصنف هو قالب أو نموذج يُستخدم لإنشاء كائنات. يحتوي على خصائص (حقول) وسلوكيات (طرق).

java
public class Car { String model; int year; public void startEngine() { System.out.println("Engine started"); } }

إنشاء كائن من الصنف

java
Car myCar = new Car(); myCar.model = "Toyota"; myCar.year = 2022; myCar.startEngine();

الوراثة (Inheritance)

الوراثة تسمح لصنف باكتساب خصائص وسلوكيات من صنف آخر.

java
public class Animal { public void makeSound() { System.out.println("Animal sound"); } } public class Dog extends Animal { public void makeSound() { System.out.println("Bark"); } }

كلمة super

تُستخدم للوصول إلى أعضاء الصنف الأب:

java
public class Dog extends Animal { public void makeSound() { super.makeSound(); // يستدعي makeSound من Animal System.out.println("Bark"); } }

الوراثة المتعددة غير مدعومة

جافا لا تدعم الوراثة المتعددة بالأصناف، لكنها تدعمها باستخدام الواجهات (Interfaces).


جدول المقارنة بين أنواع التحويل

نوع التحويل وصف مثال احتمال فقدان البيانات
التحويل الضمني يتم تلقائيًا من نوع أصغر إلى أكبر int إلى double لا
التحويل الصريح يحتاج تدخلًا يدويًا من المبرمج double إلى int نعم
تحويل النص إلى عدد باستخدام parse أو valueOf Integer.parseInt("123") نعم (في حال خطأ صيغي)
تحويل عدد إلى نص باستخدام String.valueOf() String.valueOf(45) لا
التحويل المرجعي باستخدام Upcasting أو Downcasting Animal a = new Dog(); نعم

واجهات الأصناف والمفاهيم الكائنية

التغليف (Encapsulation)

هو إخفاء تفاصيل تنفيذ الكود داخل الصنف وجعل الوصول للبيانات عبر واجهات محددة (Getters/Setters).

java
public class Person { private String name; public String getName() { return name; } public void setName(String newName) { this.name = newName; } }

التجريد (Abstraction)

هو إظهار الجوانب المهمة فقط وإخفاء التفاصيل المعقدة.

java
abstract class Shape { abstract void draw(); } class Circle extends Shape { void draw() { System.out.println("Draw circle"); } }

التعدد الشكلي (Polymorphism)

يتيح استخدام دوال لها نفس الاسم ولكن بسلوكيات مختلفة بناءً على السياق:

java
class Animal { void sound() { System.out.println("Animal makes sound"); } } class Cat extends Animal { void sound() { System.out.println("Meow"); } }

الواجهات (Interfaces)

وسيلة لتعريف عقد (Contract) تلتزم به الأصناف التي تطبق الواجهة.

java
interface Printable { void print(); } class Document implements Printable { public void print() { System.out.println("Printing document"); } }

الخاتمة

تُعد المصفوفات والدوال من اللبنات الأساسية في بناء تطبيقات فعالة بلغة جافا، كما أن فهم طرق التحويل بين أنواع البيانات ضروري لتحقيق توافق وتنقل سهل بين العمليات الحسابية والمنطقية. وتأتي الأصناف والوراثة لتدعم البرمجة الكائنية وتجعل الكود أكثر قابلية لإعادة الاستخدام والتنظيم. معرفة هذه المفاهيم بشكل شامل لا يغني فقط من الناحية الأكاديمية، بل هو ضروري لتطبيقات الحياة العملية في البرمجة وتطوير الأنظمة الحديثة.


المراجع:

  • Oracle Java Documentation: https://docs.oracle.com/javase

  • Eck, David J. “Introduction to Programming Using Java.” (Free textbook available online)