المستطيل::يحتوي على(نقطة) أو النقطة::is_inside(مستقيم)

StackOverflow https://stackoverflow.com/questions/412823

  •  03-07-2019
  •  | 
  •  

سؤال

هل يجب أن توفر واجهة برمجة التطبيقات (API) Rect::contains(Point) أو Point::is_inside(Rect) أو كليهما؟أو Math::contains(Point, Rect) لأنها متماثلة؟

نفس Q ينطبق على LineSegment::contains(Point)، Rect::full_contains(Circle) وما إلى ذلك.

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

المحلول

وRect::contains(Point) يجعل معظم معانيها كما هو لبنة. والآخر هو ليس من الضروري حقا كما كنت تتوقع كل شكل معين لتنفيذ العملية، في حين لا يملك Point لمعرفة كل شكل ممكن. الجواب نفسه ينطبق على LineSegment.

وفيما يتعلق بالعلاقة بين Circle وRect هو أكثر خادعة باستخدام معظم الأطر وجوه المنحى وليس لديه أي إجابة شافية. بعض نمط آخر من وجوه المنحى مثل CLOS تفعل ذلك عن طريق استخدام وظائف عامة وطرق مما يجعلها غير مسألة.

نصائح أخرى

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

ولكن، بشكل عام، وأنا يميل قليلا في صالح Rect::contains(Point) بدلا من Point::Is_inside(Rect). هذا لأنني أعتقد أن الطبقة Point، منذ سيتم استخدامه من قبل جميع أنواع الطبقات (مثل 'الدائرة'، 'مسدس' الخ) يجب أن تكون أساسية جدا وتحتوي فقط على الحد الأدنى من واجهة.

وMath::contains(Rect, Point) سيكون خياري الثاني. وأود أن استخدام هذا النهج، إذا أردت أن تبقى صفي مستطيل بدائية جدا وليس إضافة الكثير من وظائف "الراحة" لذلك.

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

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

مثال على مصير مصحح :: يحتوي يذهب في نهاية المطاف خاطئة هو أسلوب SDK فون سلاسل الرسم الذي هو في الأساس سلسلة :: drawInRect.

يعتمد الأمر على التنفيذ، ولكنني مثل فيديريك أميل أيضًا إلى التنفيذ الرياضيات::يحتوي على (مستقيم، نقطة), ، زيادة المستطيل::يحتوي على (نقطة).والسبب في ذلك هو أن الأخير يؤدي إلى التسلسل الهرمي للكائن الذي يتضمن يتضمن وظيفة العضو باعتبارها افتراضية، والتي يتم تجاوزها من فئة إلى أخرى.يمكن أن يكون لهذا عبء كبير محتمل حيث تتعامل مع أعداد كبيرة جدًا من المستطيلات والأوليات المماثلة.

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