Menu
CoddyTech
flag Ar iconالعربيةdown icon

المتغيرات الخاصة بالكائن مقابل المتغيرات الساكنة

جزء من قسم البرمجة كائنية التوجه في رحلة Java على Coddy. الدرس 15 من 87.

حتى الآن، ينتمي كل حقل أنشأناه إلى كائن محدد. لكل BankAccount قيمة balance خاصة به، ولكل Product قيمة name خاصة به. هذه هي متغيرات المثيل - فهي موجودة بشكل منفصل لكل مثيل من الفئة.

لكن ماذا لو كنت بحاجة إلى بيانات مشتركة بين جميع الكائنات؟ هنا يأتي دور المتغيرات الساكنة (وتُسمى أيضًا متغيرات الصنف). ينتمي المتغير الساكن إلى الصنف نفسه، وليس إلى أي كائن معيّن.

public class Student {
    private String name;           // متغير النسخة - فريد لكل طالب
    private static int totalCount; // متغير ثابت - مشترك بين جميع الطلاب
    public Student(String name) {
        this.name = name;
        totalCount++;  // يزيد العداد المشترك
    }
    public static int getTotalCount() {
        return totalCount;
    }
}

عندما تنشئ عدة طلاب، يكون لكل منهم name الخاص به، لكنهم جميعًا يتشاركون في totalCount نفسه:

Student s1 = new Student("Alice");
Student s2 = new Student("Bob");
System.out.println(Student.getTotalCount());  // الإخراج: 2

لاحظ كيفية الوصول إلى المتغير الساكن من خلال اسم الفئة (Student.getTotalCount()) بدلًا من خلال كائن. يؤكد هذا على أن الأعضاء الساكنة تنتمي إلى الفئة، وليس إلى المثيلات.

استخدم متغيرات المثيل للبيانات التي تختلف بين الكائنات (مثل اسم الطالب). واستخدم المتغيرات الساكنة للبيانات التي ينبغي مشاركتها (مثل عدّ عدد الكائنات الموجودة).

challenge icon

التحدي

سهل

لننشئ نظام جرد للكتب باستخدام Book يتتبّع تفاصيل كل كتاب على حدة والعدد الإجمالي للكتب في مجموعتك بأكملها، وذلك باستخدام متغيرات الكائنات والمتغيرات الساكنة.

ستنشئ ملفين لتنظيم التعليمات البرمجية:

  • Book.java: أنشئ فئة Book تتتبّع معلومات كل كتاب على حدة، مع الاحتفاظ أيضًا بعدد جميع الكتب التي أُنشئت:
    • متغير كائن title (String) - فريد لكل كتاب
    • متغير كائن price (double) - فريد لكل كتاب
    • متغير ساكن totalBooks (int) - مشترك بين جميع كائنات Book، ويتتبّع عدد الكتب التي أُنشئت
    • منشئ يستقبل العنوان والسعر، ويزيد العدد الإجمالي للكتب
    • دالة getter باسم getTitle() للعنوان
    • دالة getter باسم getPrice() للسعر
    • دالة ساكنة باسم getTotalBooks() تُرجع العدد الإجمالي للكتب التي أُنشئت
  • Main.java: أنشئ عدة كائنات من Book وأوضح كيفية تتبّع العداد الساكن لجميع الكائنات. ستتلقى ثلاثة عناوين للكتب وثلاثة أسعار كمدخلات. بعد إنشاء الكتب الثلاثة، اطبع أربعة أسطر:
    • عنوان كل كتاب وسعره بالتنسيق: [title]: $[price] (مع تنسيق السعر إلى منزلتين عشريتين)
    • العدد الإجمالي للكتب باستخدام الدالة الساكنة: Total books: [count]

ستتلقى ستة مدخلات بالترتيب: title1، price1، title2، price2، title3، price3.

تذكّر الوصول إلى الدالة الساكنة من خلال اسم الفئة (Book.getTotalBooks()) بدلًا من الوصول إليها عبر كائن. ولتنسيق الأسعار، استخدم String.format("%.2f", price).

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // اقرأ المدخلات لثلاثة كتب
        String title1 = scanner.nextLine();
        double price1 = Double.parseDouble(scanner.nextLine());
        String title2 = scanner.nextLine();
        double price2 = Double.parseDouble(scanner.nextLine());
        String title3 = scanner.nextLine();
        double price3 = Double.parseDouble(scanner.nextLine());
        
        // TODO: أنشئ ثلاثة كائنات Book باستخدام المدخلات أعلاه
        
        // TODO: اطبع عنوان وسعر كل كتاب بالتنسيق: [title]: $[price]
        // استخدم String.format("%.2f", price) لتنسيق السعر إلى منزلتين عشريتين
        
        // TODO: اطبع العدد الإجمالي للكتب باستخدام الطريقة الثابتة
        // Format: Total books: [count]
        // تذكر الوصول إلى الطريقة الثابتة من خلال اسم الفئة: Book.getTotalBooks()
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Java عبر الإنترنت