سؤال

ما هو أسوأ مثال (بسبب الانتشار أو الشدة) للانعكاس التجريدي الذي تراه في البرمجة اليوم؟

بالنسبة لأولئك منكم الذين ليسوا على دراية بهذا المفهوم، فإن الانعكاس التجريدي يقوم بتنفيذ بنيات منخفضة المستوى فوق بنيات عالية المستوى.بتعبير أدق، افترض أن لديك البنيتين A وB.يتم تنفيذ B فوق A، لكن A لا يتم عرضه في أي مكان.لذلك، إذا كنت تحتاج حقًا إلى بناء المستوى الأدنى A، فسينتهي بك الأمر إلى تنفيذ A فوق B، عندما يتم تنفيذ B فيما يتعلق بـ A في المقام الأول.يرى http://en.wikipedia.org/wiki/Abstraction_inversion.

هل كانت مفيدة؟

المحلول

وربما أسوأ مثال على سوء المعاملة التجريد رأيت من أي وقت مضى كان هذا بطلاقة C # ، الذي اختتم العناصر الأساسية مراقبة تدفق (إذا، البرهة، عبارات متسلسلة) في واجهة بطلاقة.

وهكذا اصطلاحي تماما، رمز نظيفة الخاص بك:

var selectedTextBox = (TextBox)sender,
if (IsAdmin)
{
    selectedTextBox.Enabled = true;
    selectedTextBox.Text = superSecretPassword;
}
else
{ 
    selectedTextBox.Clear();
}

ويصبح هذه الفوضى:

Cast<TextBox>(sender).
    WithIf(IsAdmin,
        With(selectedTextBox => selectedTextBox.Enabled = true).
        With(selectedTextBox => selectedTextBox.Text = superSecretPassword),
        With(selectedTextBox => selectedTextBox.Clear());

ولأن كل شيء على نحو أفضل مع lambdas!

نصائح أخرى

وهذا يبدو وكأنه موضوع ميت جدا. أنا سأجيب سؤالي بك فقط لبدء بعض المناقشات. أود أن أقول أسوأ انعكاس التجريد رأيت تستخدم على غرار OOP مجردة الطبقات / واجهات لتكرار مؤشرات الدالة. على سبيل المثال:

interface foo {
    int bar();
}

class myClass1 implements foo {
    // No member variables.

    int bar() {
        // Implementation
    }

    // No other methods.
}

class myClass2 implements foo {
    // No member variables.

    int bar() {
        // Implementation
    }

    // No other methods.
}

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

ولست متأكدا إذا كان هذا هو الرد على سؤالك، ولكن رأيت هذا (ولقد كنت مذنبا منه) حيث يحصل على استخدام لغة عالية المستوى لطيفة مثل اللثغة كما لو كانت فورتران أو حتى الجمعية اللغة، لأن هذا هو مستوى كان مبرمج في.

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

واستخدام العميل مكتبات مجموعات الإجرائية لمعالجة مجموعات النتائج SQL.

وماذا عن محاكاة غوتو في البرمجة الهيكلية من خلال استخدام متغيرات العلم منطقية؟ ومع ذلك، فقد أصبح البرمجة الهيكلية المقبولة عموما. أليس هذا دليلا على أن التجريد انعكاس ليست دائما أمرا سيئا ؟؟

والجواب آخر، أو سؤال، إذا كنت لا تمانع. تعني كلمة "التجريد" فعلا تعريف؟ هي تجريدات جيدة فعلا، أو سيئة، أو محايدا؟ أعني، أنا أفهم عدد 2 مجردة لأنها تقف على ما هو مشترك حول 2 الأحذية، 2 عيون (2)، دورات، وما إلى ذلك واجهة IStack يمكن أن تكون مجردة لأنه ينطبق على الأشياء التي تتصرف مثل المداخن. ولكن إذا يدعو روتين روتين B يعني ذلك أنها أكثر تجريدا؟ لماذا نحن المغرمين جدا من هذه الكلمة؟

وEDT: أنا أسأل فقط لأنني رأيت الناس يحضر أنوفهم في قضايا "ملموسة"، والتفكير الغابة هو أكثر أهمية من أشجار

ولست متأكدا إذا كان هذا يؤهل حقا، ولكن على ما يبدو ذات الصلة. عندما جاء SQL خادم 2005 بها مع قدرات CLR، سمعت مجموعة من المطورين يقولون أشياء مثل "تدعو بشكل جيد، ونحن الآن يمكن اطلاق النار من خدمة ويب مباشرة من الإجراءات المخزنة لدينا!" ورأيت أيضا العديد من الدروس على القيام بذلك. تلك هي بعض المستويات متضاربة من التجريد.

ما هو أسوأ (بسبب انتشار أو شدة) مثال على انعكاس التجريد الذي تراها في البرمجة اليوم؟

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

  • CustomerFactory
  • DecisionTreeVisitor
  • AbstractWindowDecorator
  • JsonDataAdapter
  • TabbedDocumentImpl
  • ConcreteListHandler

"المصنع"، "الزائر"، "مصمم الديكور"، "المحول"، "التجهيز"، "الخرسانة" - من يهتم بكيفية تنفيذه، وفيم يتم استخدامه؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top