المصفوفات والدوال في جافا، طرق التحويل بين أنواع البيانات، ولمحة عن الأصناف والوراثة
تُعتبر لغة البرمجة جافا (Java) واحدة من أكثر اللغات استخداماً في العالم بفضل بنيتها القوية وتعدد استخداماتها في تطوير التطبيقات من الهواتف المحمولة إلى الأنظمة الكبيرة. وتعتمد جافا على المفاهيم الأساسية للبرمجة الكائنية التوجه (OOP)، كما توفر أدوات قوية للتعامل مع المصفوفات والدوال (الطرق)، بالإضافة إلى نظام صارم لأنواع البيانات والتحويل بينها. في هذا المقال، سيتم تناول هذه المفاهيم بالتفصيل، بدءًا من المصفوفات، مرورًا بالدوال، ثم طرق التحويل بين الأنواع، وأخيرًا لمحة شاملة عن الأصناف (Classes) والوراثة (Inheritance) في جافا.
المصفوفات في جافا (Arrays)
تعريف المصفوفة
المصفوفة في جافا هي بنية بيانات خطية تُستخدم لتخزين مجموعة من العناصر من نفس النوع في موقع متصل من الذاكرة. يمكن اعتبارها كحاوية تحتوي على عناصر مرقمة بترتيب محدد.
إعلان وتهيئة المصفوفة
يتم إعلان المصفوفة باستخدام الصيغة التالية:
javaint[] numbers; // إعلان فقط
numbers = new int[5]; // إنشاء مصفوفة بطول 5
كما يمكن تهيئة المصفوفة مباشرة:
javaint[] numbers = {1, 2, 3, 4, 5};
الوصول إلى عناصر المصفوفة
يتم استخدام الفهرس (Index) للوصول إلى العناصر، مع العلم أن الترقيم يبدأ من الصفر:
javaSystem.out.println(numbers[0]); // يطبع 1
numbers[2] = 10; // تغيير القيمة في الموقع الثالث
التكرار عبر المصفوفة
javafor (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
كما يمكن استخدام حلقة “for-each”:
javafor (int number : numbers) {
System.out.println(number);
}
المصفوفات متعددة الأبعاد
javaint[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
System.out.println(matrix[1][2]); // يطبع 6
الدوال (الطرق) في جافا
تعريف الدوال
في جافا، تُعرف الدوال باسم methods وهي كتل برمجية تُستخدم لتنفيذ تعليمات معينة. تُساعد الدوال في إعادة استخدام الكود وتنظيمه بشكل أفضل.
إنشاء دالة
javapublic static int sum(int a, int b) {
return a + b;
}
استدعاء دالة
javaint result = sum(5, 10); // النتيجة هي 15
أنواع الدوال
-
دوال لا تُعيد قيمة: تستخدم الكلمة المفتاحية
void -
دوال تُعيد قيمة: تحدد نوع القيمة المرجعة مثل
int,String, إلخ. -
دوال بوسائط متعددة
-
دوال بدون وسائط
الدوال الثابتة (Static) وغير الثابتة
-
الدوال الثابتة تُستدعى باستخدام اسم الصنف مباشرة.
-
الدوال غير الثابتة تتطلب إنشاء كائن (Object).
javapublic class MathUtils {
public static int multiply(int x, int y) {
return x * y;
}
}
التحويل بين أنواع البيانات في جافا (Type Conversion)
التحويل الضمني (Widening)
يحدث تلقائيًا عندما يكون النوع المستهدف أكبر حجمًا:
javaint x = 10;
double y = x; // تحويل ضمني من int إلى double
التحويل الصريح (Narrowing)
يتطلب تدخل المبرمج وقد يؤدي إلى فقدان البيانات:
javadouble a = 9.7;
int b = (int) a; // التحويل سيؤدي إلى ب = 9
تحويل البيانات بين أنواع غير متوافقة
-
يمكن استخدام دوال
parseوvalueOfلتحويل النصوص إلى أرقام:
javaString s = "123";
int number = Integer.parseInt(s); // 123
التحويل من عدد إلى سلسلة نصية
javaint num = 100;
String str = String.valueOf(num); // "100"
التحويل بين أنواع مرجعية
عند العمل مع الأصناف والوراثة، يمكن استخدام التحويل الصاعد (Upcasting) والتحويل الهابط (Downcasting):
javaAnimal a = new Dog(); // Upcasting
Dog d = (Dog) a; // Downcasting (يتطلب تحققًا)
الأصناف والوراثة في جافا
ما هو الصنف (Class)؟
الصنف هو قالب أو نموذج يُستخدم لإنشاء كائنات. يحتوي على خصائص (حقول) وسلوكيات (طرق).
javapublic class Car {
String model;
int year;
public void startEngine() {
System.out.println("Engine started");
}
}
إنشاء كائن من الصنف
javaCar myCar = new Car();
myCar.model = "Toyota";
myCar.year = 2022;
myCar.startEngine();
الوراثة (Inheritance)
الوراثة تسمح لصنف باكتساب خصائص وسلوكيات من صنف آخر.
javapublic class Animal {
public void makeSound() {
System.out.println("Animal sound");
}
}
public class Dog extends Animal {
public void makeSound() {
System.out.println("Bark");
}
}
كلمة super
تُستخدم للوصول إلى أعضاء الصنف الأب:
javapublic 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).
javapublic class Person {
private String name;
public String getName() {
return name;
}
public void setName(String newName) {
this.name = newName;
}
}
التجريد (Abstraction)
هو إظهار الجوانب المهمة فقط وإخفاء التفاصيل المعقدة.
javaabstract class Shape {
abstract void draw();
}
class Circle extends Shape {
void draw() {
System.out.println("Draw circle");
}
}
التعدد الشكلي (Polymorphism)
يتيح استخدام دوال لها نفس الاسم ولكن بسلوكيات مختلفة بناءً على السياق:
javaclass Animal {
void sound() {
System.out.println("Animal makes sound");
}
}
class Cat extends Animal {
void sound() {
System.out.println("Meow");
}
}
الواجهات (Interfaces)
وسيلة لتعريف عقد (Contract) تلتزم به الأصناف التي تطبق الواجهة.
javainterface 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)

