سؤال

نظرا لمجموعة من فئات Tuple في لغة OOP: الزوج، الثلاثي والكدري، يجب أن الزوج الفرعي ثلاثي ثلاث مرات، و triple subclass رباعية؟

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

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

من ناحية أخرى، يجب أن يكون كل من أنواع مميزة؟ أستطيع أن أرى الاستفادة في فحص النوع الأقوى - حيث لا يمكنك تمرير ثلاثي إلى طريقة تتوقع زوجا.

أنا أتميل نحو استخدام الميراث، لكنني أقدر حقا مدخلات من الآخرين؟

ملاحظة: في حالة تهم، تكون الفصول (بالطبع) عام.

PPS: في طريق أكثر موضوعية، يجب أن تكون الأسماء Tuple2، Tuple3 و Tuple4؟


تحرير: أنا أفكر في هذه المجموعات الأقدم فضفاضة؛ ليس على وجه التحديد للأشياء مثل x / yx / y / z إحداثيات، على الرغم من أنه قد يتم استخدامها لهذه. ستكون أشياء مثل الحاجة إلى حل عام لقيم عودة متعددة من الأسلوب، ولكن في شكل مع دلالات بسيطة للغاية.

ومع ذلك، أنا مهتم بكل الطرق التي استخدمها البعض الآخر tuples.

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

المحلول

طول tuple مختلف هو نوع مختلف. (حسنا، في العديد من الأنظمة من النوع على أي حال.) في لغة مكتوبة بشدة، لن أظن أنهم يجب أن يكونوا مجموعة.

هذا شيء جيد لأنه يضمن المزيد من السلامة. الأماكن التي تقوم فيها بإرجاع Tuples عادة ما تكون هناك معلومات مقرونة إلى حد ما إلى جانبها، والمعرفة الضمنية بما هو كل مكون. من الأسوأ إذا مررت بأكثر من القيم في Tuple أكثر مما كان متوقعا - ما الذي يفترض أن يعنيه؟ لا يناسب الميراث.

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

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

تحرير: إذا كنت تريد معلومات عامة، فحاول الإثارة قليلا من عائلة Haskell أو ML (OCAML / F #) لمعرفة كيفية استخدامها ثم تشكل قراراتك الخاصة.

نصائح أخرى

يبدو لي أنه يجب عليك أن تجعل واجهة Tuple عامة (أو استخدام شيء مثل المجموعة المذكورة أعلاه)، ولديك زوجك و 3 فصول ثلاثية تنفذ هذه الواجهة. بهذه الطريقة، يمكنك الاستفادة من تعدد الأشكال ولكن السماح للزوج أيضا باستخدام تطبيق أبسط من Tuple بحجم تعسفي. من المحتمل أنك تريد أن تجعل واجهة Tuple الخاصة بك تتضمن .x و .y deconsors كاختصار لأول عنصرين، ويمكن أن تقوم Tuples أكبر بتنفيذ اختصارها الخاص حسب الاقتضاء للعناصر ذات المؤشرات العليا.

مثل معظم الأسئلة ذات الصلة التصميم، الجواب هو - هذا يعتمد.

إذا كنت تبحث عن تصميم Tuple التقليدي، Tuple2، Tuple3 إلخ هو الطريق للذهاب. المشكلة مع الميراث هي أن الأول من كل ثلاث مرات ليس نوعا من الزوج. كيف يمكنك تنفيذ الطريقة المساواة لذلك؟ هو ثلاثية يساوي زوج مع أول عنصرين نفس الشيء؟ إذا كان لديك مجموعة من الأزواج، فيمكنك إضافة ثلاثية إلى ذلك أو العكس؟ إذا كان ذلك في مجالك على ما يرام، يمكنك الذهاب مع الميراث.

أي قضية، فهي تدفع للحصول على فئة واجهة / مجردة (ربما Tuple) التي تنفذ كل هذه.

ذلك يعتمد على الدلالات التي تحتاجها -

  • لا يتوافق زوج من الأضداد بشكل شبه نفسي مع ثلاثة أضعاف من الأشياء المماثلة
  • لا يتوافق زوج من الإحداثيات في الفضاء القطبي بشكل شبه نفسي مع ثلاثة أضعاف من الإحداثيات في الفضاء Euclidean

إذا كانت دلالاتك هي مؤلفات بسيطة، فقم بتوزيع فئة عامةu003CN> من شأنه أن يكون أكثر منطقية

سأذهب مع 0،1،2 أو اللانهاية. مثل NULL، كائن واحد، فئة الزوج، أو ثم مجموعة من نوع ما.

يمكن أن يقوم زوجك بتنفيذ واجهة التجميع.

إذا كانت هناك علاقة محددة بين ثلاثة أو أربعة عناصر، فمن المحتمل أن يتم تسميتها.

ربما أفتقد المشكلة، لكنني لا أستطيع التفكير في حالة حيث أريد أن ربط 3 أشياء في طريقة عامة

جلعاد براشا مدون حول tuples., ، التي وجدت قراءة مثيرة للاهتمام.

نقطة واحدة قام بها (سواء بشكل صحيح أم لا لا أستطيع الحكم بعد) كان:

يتم تعريف tuples الحرفي على أنها قراءة فقط. أحد أسباب ذلك هو أن Tuples Readonly أكثر من ذلك جنسيا. tuples الطويلة هي فرعية من تلك قصيرة:

{stu v} <= {st} <= {s. T} <= {s}

و] قراءة tuples فقط هي covariant:

T1 <= T2، S1 <= s2 ==> {S1. T1} <= {S2. T2}

يبدو أن ذلك يشير إلى أن ميلي لاستخدام الميراث قد يكون صحيحا، وسوف يتعارض مع amit.dev عندما يقول أن ثلاثة أضعاف ليس زوج.

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