شعار ConstructiCat
CodeBust.
تصفح القسم ▾

الاقتران التسلسلي.

الاقتران التسلسلي نمط مضاد لا تعمل فيه الكلاس بشكل صحيح إلا إذا استُدعيت دوالها بترتيب محدد لا يُصرَّح به في أي مكان.

في البرمجة كائنية التوجه، الاقتران التسلسلي (المعروف أيضاً بـالاقتران الزمني) هو شكل من أشكال الاقتران حيث تستلزم الكلاس استدعاء دوالها بترتيب معين. قد يُعدّ هذا نمطاً مضاداً، حسب السياق.

قد تدل الدوال التي تبدأ أسماؤها بـ Init أو Begin أو Start وما شابهها على وجود اقتران تسلسلي.

كتشبيه باستخدام السيارة كنموذج تشبيهي، إذا ضغط المستخدم على دواسة الغاز دون تشغيل المحرك أولاً، فإن السيارة لا تتعطل ولا تفشل ولا ترمي استثناءً - بل ببساطة تفشل في التسارع.

يمكن إعادة هيكلة الاقتران التسلسلي باستخدام نمط أسلوب القالب للتغلب على المشكلات التي يطرحها استخدام هذا النمط المضاد.

مثال

لا يعمل Parser هذا إلا إذا استُدعيت دواله بالترتيب الصحيح تماماً، ولا شيء في واجهته يشير إلى ذلك: يكفي نسيان tokenize() لكي تفشل buildTree() وقت التشغيل مع NullPointerException.

class Client {
    Node run(String text) {
        Parser parser = new Parser();
        parser.setInput(text); // يجب استدعاؤه أولاً
        parser.tokenize();     // يجب استدعاؤه ثانياً
        return parser.buildTree();
    }
}

class Parser {
    private String input;
    private List<String> tokens;

    void setInput(String text) { this.input = text; }
    void tokenize() { tokens = List.of(input.trim().split("\\s+")); }
    Node buildTree() { return new Node(List.copyOf(tokens)); } // NullPointerException إذا لم يُستدعَ tokenize()
}

أصبحت دالة عامة واحدة تنفّذ الخطوات بنفسها وتمرّر لكل خطوة نتيجة الخطوة السابقة، فلم يعد من الممكن كتابة ترتيب خاطئ أصلاً:

class Client {
    Node run(String text) {
        return new Parser().parse(text);
    }
}

final class Parser {
    Node parse(String text) {
        List<String> tokens = tokenize(text);
        return buildTree(tokens);
    }

    private List<String> tokenize(String text) { return List.of(text.trim().split("\\s+")); }
    private Node buildTree(List<String> tokens) { return new Node(List.copyOf(tokens)); }
}

عندما تحتاج الكلاسات الفرعية إلى تخصيص خطوات بعينها، يقدّم نمط أسلوب القالب الضمان نفسه: تثبّت الكلاس الأساسية الترتيب، ولا تعيد الكلاسات الفرعية تعريف سوى الخطوات.

مقتبس من مقالة ويكيبيديا “Sequential coupling” (المراجعة 1320717439)، والمتاحة بموجب رخصة CC BY-SA 4.0؛ تمت ترجمة النص وتحريره وإضافة أمثلة.