অবজেক্ট ওরিয়েন্টেড ডিজাইন


23

ধরুন আপনার নিম্নলিখিতগুলি রয়েছে:

     +--------+     +------+
     | Animal |     | Food |
     +-+------+     +----+-+
       ^                 ^
       |                 |
       |                 |
  +------+              +-------+
  | Deer |              | Grass |
  +------+              +-------+

Deerথেকে উত্তরাধিকার সূত্রে প্রাপ্ত Animal, এবং Grassউত্তরাধিকার সূত্রে প্রাপ্ত Food

এ পর্যন্ত সব ঠিকই. Animalবস্তু বস্তু খেতে Foodপারে।

এবার এটি কিছুটা মিশ্রিত করা যাক। আসুন Lionযা থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় Animal

     +--------+     +------+
     | Animal |     | Food |
     +-+-----++     +----+-+
       ^     ^           ^
       |     |           |
       |     |           |
  +------+ +------+     +-------+
  | Deer | | Lion |     | Grass |
  +------+ +------+     +-------+

এখন আমরা কারণ একটি সমস্যা আছে Lionউভয় খেতে পারেন Deerএবং Grass, কিন্তু Deerকরা হয় না Foodএটা Animal

একাধিক উত্তরাধিকার ব্যবহার এবং অবজেক্ট ওরিয়েন্টেড ডিজাইন ব্যবহার করে আপনি কীভাবে এই সমস্যার সমাধান করবেন?

এফওয়াইআই: ASCII ডায়াগ্রামগুলি তৈরি করতে আমি http://www.asciiflow.com ব্যবহার করেছি ।


14
প্রকৃত বিশ্বের মডেলিং করা প্রায়শই তাড়াতাড়ি বা পরে সমস্যা, কারণ এখানে সবসময় অদ্ভুত কিছু ঘটে থাকে (যেমন উড়ন্ত মাছ, একটি মাছ বা একটি পাখি? তবে পেঙ্গুইন একটি পাখি, উড়তে পারে না এবং মাছ খায়)। @ অ্যাম্পট যা বলে তা কলুষিতকর শোনায়, একটি প্রাণীর কাছে এটি খেয়ে নেওয়া সামগ্রীর সংগ্রহ থাকা উচিত।
রব ভ্যান ডের বীর

2
আমি মনে করি খাদ্য থেকে পশুদের উত্তরাধিকারী হওয়া উচিত। যদি কোনও কিছু সিংহ খাওয়ার চেষ্টা করে তবে কেবল একটি অবৈধপ্রকাশের ধারণাটি নিক্ষেপ করুন।
রাল্ফচাপিন

4
@ রাল্ফচাপিন: সব ধরণের জিনিস সিংহ (শকুন, বাগ, ইত্যাদি) খায়। আমি মনে করি প্রাণী এবং খাদ্য হ'ল কৃত্রিম পার্থক্য যা ভেঙে যাবে কারণ এগুলি যথেষ্ট প্রশস্ত নয় (সব প্রাণীই অন্য কিছু প্রাণীর খাদ্য, শেষ পর্যন্ত)। যদি আপনি "লিভিংথিং" -র বিষয়ে মতবিরোধ করেন তবে আপনাকে কেবল জীবন্ত জিনিস (খনিজ ইত্যাদি) খাওয়ার গাছগুলির সাথে প্রান্তের মামলাগুলি মোকাবেলা করতে হবে এবং এটি লিভিংথিং.এট (লিভিংথিং) রাখার কোনও কিছুই ভাঙ্গবে না।
শয়তানিকপিপি

2
আপনার গবেষণা ভাগ করে নেওয়া প্রত্যেককে সহায়তা করে। আপনি কী চেষ্টা করেছেন এবং কেন এটি আপনার প্রয়োজনীয়তা মেটেনি তা আমাদের বলুন। এটি প্রমাণ করে যে আপনি নিজেকে সাহায্য করার চেষ্টা করার জন্য সময় নিয়েছেন, এটি আমাদের সুস্পষ্ট উত্তরের পুনরাবৃত্তি থেকে বাঁচায় এবং সর্বোপরি এটি আপনাকে আরও নির্দিষ্ট এবং প্রাসঙ্গিক উত্তর পেতে সহায়তা করে। আরো দেখুন কিভাবে জিজ্ঞাসা করতে
মশা

9
এই প্রশ্নের উত্তর দেওয়া হয়েছে সাম্রাজ্যের তৃতীয় গেম এজ দ্বারা। ageofempires.wikia.com/wiki/List_of_Animals Deer and Gazelle বাস্তবায়ন করে IHuntable, মেষ এবং গরু হ'লIHerdable (মানুষের দ্বারা নিয়ন্ত্রিত), এবং সিংহ কেবল আইএনিমাল প্রয়োগ করে, যা কোনও ইন্টারফেসের দ্বারা বোঝায় না। AOE3 কোনও নির্দিষ্ট অবজেক্ট (অনুরূপ instanceof) দ্বারা সমর্থিত ইন্টারফেসগুলির সেট অনুসন্ধান করতে সহায়তা করে যা কোনও প্রোগ্রামকে তার ক্ষমতা জিজ্ঞাসা করতে সক্ষম করে allows
রবিং

উত্তর:


38

IS A সম্পর্ক = উত্তরাধিকার

সিংহ একটি প্রাণী

একটি সম্পর্ক = রচনা

গাড়ির একটি চাকা আছে

সম্পর্ক করতে পারে = ইন্টারফেস

আমি খেতে পারি


5
+1 এটি এত সহজ এবং তবুও 3 টি ভিন্ন সম্পর্কের ধরণের এত ভাল সংক্ষিপ্তসার
dreza

4
বিকল্প: ICanBeEatenবাIEdible
মাইক ওয়েলার

2
HAZ সম্পর্কগুলি = lolcats
স্টিভেন এ লো 13

1
কিভাবে এই প্রশ্নের উত্তর দেয়?
ব্যবহারকারী 253751

13

ওও হ'ল একটি রূপক যা বাস্তব বিশ্বের পরে নিজেকে নিদর্শন দেয়। তবে রূপকগুলি কেবল এতদূর যায়।

সাধারণত ওও তে কিছু মডেল করার সঠিক উপায় নেই। কোনও নির্দিষ্ট ডোমেনে কোনও নির্দিষ্ট সমস্যার জন্য এটি করার একটি সঠিক উপায় আছে এবং আপনি যদি নিজের সমস্যা পরিবর্তন করেন তবে এটি ভাল কাজ করবে এমনটি আশা করা উচিত নয়, এমনকি ডোমেন অবজেক্ট একই রকম থাকে।

আমি মনে করি এটি একটি সাধারণ ভুল ধারণা। ইং। ছাত্রদের তাদের প্রথম বছর আছে। ওও কোনও সর্বজনীন সমাধান নয়, কিছু ধরণের সমস্যার জন্য কেবলমাত্র একটি শালীন সরঞ্জাম যা আপনার ডোমেনটিকে যথাযথভাবে মডেল করতে পারে।

আমি প্রশ্নের উত্তর দিলাম না, কারণ আমাদের ডোমেনের তথ্যের অভাব রয়েছে। তবে উপরের কথাটি মাথায় রেখে আপনি এমন কিছু ডিজাইন করতে সক্ষম হতে পারেন যা আপনার প্রয়োজন অনুসারে কাজ করবে।


3
+1 ওও একটি হাতিয়ার, ধর্ম নয়।
mouviciel

আমি একমত, এই সমস্যাটি যদি অব্যাহতভাবে পরিবর্তিত হতে থাকে এবং বিকশিত হয় তবে নিখুঁত সমাধান নাও হতে পারে। বর্তমান অবস্থাতেই কি কোনও সমস্যা সমাধানের জন্য ডোমেন তথ্যের অভাব রয়েছে?
মাইকেল আইরি

আপনি কি গুরুত্বের সাথে ভাবছেন যে কোনও বাস্তব জগতকে ওপিতে মডেল করা হচ্ছে? একটি সম্পর্কের মডেল একটি উদাহরণ মাধ্যমে উপস্থাপন করা হয়।
বেসিলিভ

@ বাসিলিভস প্রকৃতপক্ষে এ জাতীয় জড়িত বিষয়টি, যেহেতু তিনি প্রকৃত জীবনে প্রাণী কীভাবে আচরণ করে সে উল্লেখ করেছেন। আইএমও, প্রোগ্রামে অ্যাকাউন্টের জন্য একজনের কেন এমন আচরণ প্রয়োজন তা নিয়ে আমাদের চিন্তিত হওয়া দরকার। এটি বলেছিল, কিছু সম্ভাব্য নকশার পরামর্শ দিলে আমার ভাল লাগত।
ডিপিএম

10

আপনি পশুদের আরও তাদের উপশ্রেণীতে বিভক্ত করতে চান (বা আপনি যা করছেন তার জন্য কমপক্ষে কোনও ধারণা দেয়)। আপনি যে মৌলিক প্রাণী এবং দুটি ধরণের খাবার (উদ্ভিদ এবং মাংস) দেখতে দেখতে এটির সাথে কাজ করছেন তা বিবেচনা করে, কোনও প্রাণীকে আরও সংজ্ঞায়িত করার জন্য এবং তাদের পৃথকীকরণে মাংসাশী এবং নিরামিষাশীদের ব্যবহার করা বোধগম্য। আপনার জন্য আমি যা আঁকলাম তা এখানে।

             +----------------+                   +--------------------+
             |    Animal      |                   |      Food          |
             |----------------|<--+Interfaces+--->|--------------------|
             |                |                   |                    |
             +----------------+                   +--------------------+
                +           +                       +                 +
                |           |    Abstract Classes   |                 |
                |           |        |          |   |                 |
                v           v        v          v   v                 v
   +-----------------+  +----------------+     +------------+      +------------+
   |   Herbivore     |  |  Carnivore     |     |   Plant    |      |   Meat     |
   |-----------------|  |----------------|     |------------|      |------------|
   |Eat(Plant p)     |  |Eat(Meat m)     |     |            |      |            |
   |                 |  |                |     |            |      |            |
   +-----------------+  +----------------+     +------------+      +------------+
            +                    +                    +                   +
            |                    |                    |                   |
            v                    v                    v                   v
   +-----------------+  +----------------+     +------------+      +------------+
   |  Deer           |  |   Lion         |     |  Grass     |      |  DeerMeat  |
   |-----------------|  |----------------|     |------------|      |------------|
   |DeerMeat Die()      |void Kill(Deer) |     |            |      |            |
   +-----------------+  +----------------+     +------------+      +------------+
                                 ^                    ^
                                 |                    |
                                 |                    |
                              Concrete Classes -------+

আপনি দেখতে পাচ্ছেন যে, তারা দুজনেই একটি খাওয়ার পদ্ধতি প্রকাশ করে তবে কী তারা খায় তা পরিবর্তিত হয়। সিংহ এখন একটি হরিণকে হত্যা করতে পারে, হরিণটি মারা যায় এবং ডিরমিটকে ফিরে দিতে পারে এবং ওপিএসের মূল প্রশ্নটি কীভাবে সিংহকে হরিণ খেতে দেয় তবে ঘাস নয় কীভাবে পুরো বাস্তুতন্ত্রের প্রকৌশল ছাড়া উত্তর দেওয়া হয়।

অবশ্যই এটি খুব তাড়াতাড়ি আকর্ষণীয় হয়ে ওঠে কারণ হরিণকেও এক ধরণের মাংস হিসাবে বিবেচনা করা যেতে পারে তবে জিনিসগুলি সহজ রাখতে আমি হরিণের নীচে কিল () নামক একটি পদ্ধতি তৈরি করব যা হরিণের মাংস ফেরত দেয় এবং এটিকে একটি হ'ল হিসাবে রাখে মাংস প্রসারিত কংক্রিট বর্গ।


হরিণ কি তাহলে কোনও ইমিট ইন্টারফেস প্রকাশ করবে?
ড্যান পিচেলম্যান

মাংস কোনও ইন্টারফেস নয়, এটি একটি বিমূর্ত শ্রেণি। আমি যোগ আমি বাস্তবায়ন করবে তার জন্য
Ampt

Eat(Plant p)এবং Eat(Meat m)উভয়ই এলএসপিকে লঙ্ঘন করে।
তুলিনস কর্ডোভা

কিভাবে ইউজার 61852? আমি ইচ্ছাকৃতভাবে প্রাণীর ইন্টারফেসে ইট প্রকাশ করিনি যাতে প্রতিটি ধরণের প্রাণীর নিজের খাওয়ার পদ্ধতি থাকতে পারে।
Ampt

1
টিসিডাব্লুএল (খুব জটিল, ফাঁস হবে)। সমস্যাটি বিতরণ করা হয় এবং উদ্ভূত হয় এবং আপনার সমাধান স্থিতিশীল, কেন্দ্রীয় এবং পূর্বনির্ধারিত- TCWL।
তুলাইনস কর্ডোভা

7

আমার নকশাটি এরকম হবে:

  1. খাবারগুলি ইন্টারফেস হিসাবে ঘোষণা করা হয়; এটি থেকে একটি আইএফড ইন্টারফেস এবং দুটি ডেরিভেটেড ইন্টারফেস রয়েছে: ইমিমিট এবং আইভিজেটেবল
  2. প্রাণীগুলি ইমিট এবং উদ্ভিজ্জগুলি আইভিজেটেবল প্রয়োগ করে
  3. প্রাণীদের দুটি বংশধর, কার্নিভোরস এবং হবিভোরস রয়েছে
  4. কার্নিভোরদের ইট পদ্ধতি রয়েছে যা ইমিটের উদাহরণ দেয়
  5. হার্বাইভোরসের মধ্যে খাওয়ার পদ্ধতি রয়েছে যা আইভিজেটেবলের উদাহরণ পায়
  6. কর্ণিভোর থেকে সিংহ নেমেছে
  7. হরিবিভোর থেকে হরিণ নেমেছে
  8. ঘাস উদ্ভিজ্জ থেকে অবতরণ

যেহেতু প্রাণীগুলি ইমিট প্রয়োগ করে এবং হরিণ হ'ল একটি (হার্বাইভোর) প্রাণী, সিংহ, যা একটি (কর্নিভোর) প্রাণী যা আইমেট খেতে পারে হরিণও খেতে পারে।

হরিণ হরিভিভোর, সুতরাং এটি গ্রাস খেতে পারে কারণ এটি আইভিজেটেবল প্রয়োগ করে।

মাংসপেশী IVegeable খেতে পারবেন না এবং ভেষজভোজী IMEAT খেতে পারবেন না।


1
আমি এখানে উত্তরাধিকার ব্যবহার করে প্রচুর পরিমাণে দেখছি যখন উত্তরাধিকার সূত্রে প্রাপ্ত কিছুগুলি কিছুই প্রয়োগ করে না ... যখনই আপনি নিজেকে এমন ধরনের তৈরি করতে দেখেন যা কোনও কার্যকারিতা বাস্তবায়িত করে না, এটি একটি ছাড়ের কিছু; আপনি টাইপ সিস্টেমে এমন একটি মডেল প্রসারিত করেছেন যা কোডে ব্যবহারের কোনও মূল্য দেয় না
জিমি হোফা

মনে রাখবেন সর্বকোষের চেয়েও মানুষের, এপস এবং ভাল্লুকের মতো অস্তিত্ব রয়েছে।
তুলাইনস কর্ডোভা

সুতরাং আপনি কীভাবে যুক্ত করবেন যে সিংহ এবং হরিণ উভয়ই স্তন্যপায়ী? :-)
জোহনেস

2
@ জিমিহোফা এগুলিকে "মার্কার ইন্টারফেস" বলা হয় এবং এটি ইন্টারফেসের সম্পূর্ণ বৈধ ব্যবহার। ব্যবহারটি ন্যায়সঙ্গত কিনা তা সিদ্ধান্ত নেওয়ার জন্য এটি কোড-পর্যালোচনা করা দরকার, তবে ব্যবহারের অনেকগুলি কেস রয়েছে (যেমন এটি, যেখানে সিংহ গ্রাস খেতে চেষ্টা করে একটি নো ইন্টারফেস ব্যতিক্রম নিক্ষেপ করবে)। চিহ্নিতকারী ইন্টারফেস (বা অভাব) একটি ব্যতিক্রম পূর্বাভাস দেয় যা একটি পদ্ধতি অসমর্থিত আর্গুমেন্টের সাথে ডাকা হলে ফেলে দেওয়া হবে fore
রবিং

1
@ রং আমি ধারণাটি বুঝতে পেরেছি, এর আগে এটি কখনও আনুষ্ঠানিকভাবে শুনিনি; কেবলমাত্র আমার অভিজ্ঞতাটি প্রতিটি কোডের ভিত্তিতে আমি কাজ করে যাচ্ছি যা সেগুলি করে এটি জিনিসগুলিকে আরও জটিল এবং বজায় রাখা আরও কঠিন করে তোলে। সম্ভবত আমার অভিজ্ঞতা ঠিক সেখানেই হয়েছে যেখানে লোকেরা তাদের ভুল ব্যবহার করেছিল।
জিমি হোফা

5

প্রাণী কোন খাবার খেতে পারে তা আসলে একটি শ্রেণিবিন্যাস গঠন করে না, এক্ষেত্রে প্রকৃতি সহজ অবজেক্ট ওরিয়েন্টেড মডেলিংয়ের সাথে সামঞ্জস্য করতে ব্যর্থ হয়েছিল (নোট করুন যে এটি করা হলেও প্রাণীকে খাবার থেকে উত্তরাধিকারী হতে হবে, যেহেতু এটি খাদ্য)।

কোন প্রাণী কোন খাবার খেতে পারে তার জ্ঞান ক্লাসগুলির মধ্যে কোনওর সাথেই পুরোপুরি বেঁচে থাকতে পারে না , তাই খাবারের শ্রেণিবদ্ধের কোনও সদস্যের সাথে কেবল রেফারেন্স দেওয়া আপনি কী কী খাবার খেতে পারবেন তা বলার পক্ষে যথেষ্ট নয়।

এটি অনেক সম্পর্কে অনেক সম্পর্ক। এর অর্থ প্রতিবার আপনি যখন কোনও প্রাণী যুক্ত করেন, তখন এটি কী খাওয়া যায় তা নির্ধারণ করতে হবে এবং আপনি যখনই কোনও খাবার যুক্ত করবেন তখন আপনাকে কী খাওয়াতে পারে তা নির্ধারণ করতে হবে। শোষণ করার জন্য আরও কাঠামো আছে কিনা তা নির্ভর করে আপনি কোন প্রাণী এবং খাবারের মডেলিং করছেন।

একাধিক উত্তরাধিকার সত্যই এটি খুব ভাল সমাধান হয় না। আপনার প্রাণীর দ্বারা খাওয়া যেতে পারে এমন কিছু জিনিস বা খাবার খেতে পারে এমন প্রাণীর সংগ্রহের প্রয়োজন।


যেমন তারা রেজেক্স সম্পর্কে বলে "আমার একটি সমস্যা ছিল তাই আমি রেগেক্স ব্যবহার করলাম, এখন আমার দুটি সমস্যা আছে", এমআই "আমার সমস্যা ছিল তাই আমি এমআই ব্যবহার করতাম, এখন আমার 99 টি সমস্যা আছে" এর পংক্তিতে রয়েছে "আমি যদি আপনি থাকতাম আমি" ডি যে অনর্থক আপনি এখানে poking ছিল অনুসরণ করুন খাদ্য যদিও এটি খেতে পারে তা জেনেও, এটি আসলে এক টন মডেলকে সহজ করে তোলে। নির্ভরতা বিপরীতমুখী এফটিডাব্লু।
জিমি হোফা

1

আমি সমস্যাটি বিভিন্ন দিক থেকে দেখব: ওওপি আচরণ সম্পর্কে। আপনার ক্ষেত্রে, Grassসন্তানের হওয়ার কিছু আচরণ আছে Food? সুতরাং আপনার ক্ষেত্রে, Grassশ্রেণি থাকবে না , বা কমপক্ষে, এটি উত্তরাধিকার সূত্রে প্রাপ্ত হবে না Food। এছাড়াও, আপনার যদি সংকলনের সময় কারা খেতে পারে তা প্রয়োগ করতে হবে, যদি আপনার Animalবিমূর্ততা প্রয়োজন হয় তবে এটি প্রশ্নযুক্ত। এছাড়াও, মাংসপিন্ডরা ঘাস খাওয়া দেখতে বিরল নয় , যদিও জীবিকা নির্বাহের জন্য নয়।

সুতরাং আমি এটিকে ডিজাইন করব (এএসসিআই শিল্প নিয়ে বিরক্ত করবেন না):

IEdibleসম্পত্তির সাথে Type, যা মাংস, উদ্ভিদ, শব, ইত্যাদির মশালার সাথে রয়েছে ((এটি প্রায়শই পরিবর্তিত হয় না এবং এর কোনও নির্দিষ্ট আচরণ হয় না, সুতরাং এটি শ্রেণিবৃত্তি হিসাবে মডেল করার দরকার নেই)।

Animalপদ্ধতি CanEat(IEdible food)এবং Eat(IEdible food), যা যৌক্তিক। তারপরে, নির্দিষ্ট প্রাণী যখনই প্রদত্ত পরিস্থিতিতে খেতে পারে তখনই পরীক্ষা করতে পারে এবং তারপরে জীবিকা অর্জন / অন্য কিছু করার জন্য সেই খাবারটি খেতে পারে। এছাড়াও, আমি কার্নিভোর, হার্বিভোর, ওমনিভোর ক্লাসগুলিকে প্রাণীক্রমক্রমের অংশের চেয়ে কৌশলগত প্যাটার্ন হিসাবে মডেল করব would


1

টিএল; ডিআর: একটি প্রসঙ্গে নকশা বা মডেল।

আমি মনে করি আপনার প্রশ্নটি কঠিন কারণ এটির সমাধানের জন্য প্রকৃত সমস্যার প্রসঙ্গের অভাব রয়েছে। আপনার কয়েকটি মডেল এবং কিছু সম্পর্ক রয়েছে তবে এর কাঠামোর অভাব রয়েছে যাতে এটির কাজ করা দরকার। প্রসঙ্গ ব্যতীত, মডেলিং এবং রূপকগুলি ভাল কাজ করে না একাধিক ব্যাখ্যার জন্য দরজা উন্মুক্ত রেখে দেয়।

আমি কীভাবে ডেটা গ্রাহ্য করা হবে তার দিকে ফোকাস করা আরও উত্পাদনশীল বলে মনে করি। আপনার কাছে ডেটা ব্যবহারের ধরণটি পরে মডেল এবং সম্পর্কগুলি কী হওয়া উচিত তার পিছনে কাজ করা আরও সহজ।

উদাহরণস্বরূপ আরও বিস্তারিত প্রয়োজনীয়তার জন্য বিভিন্ন বস্তুর সম্পর্ক প্রয়োজন হবে:

  • সমর্থন Animals eatঅ- ing FoodমতGastroliths
  • সমর্থন Chocolateযেমন Poisonজন্য Dogsকিন্তু জন্য নয়Humans

আমরা যদি খাবারের ইন্টারফেস উপস্থাপন করা সহজ সম্পর্কের মডেল করার অনুশীলনটি শুরু করি তবে তা সেরা হতে পারে; এবং যদি এটি যোগফল হয় তবে কীভাবে সিস্টেমে সম্পর্কগুলি আপনার জরিমানা। তবে, কেবলমাত্র কয়েকটি অতিরিক্ত প্রয়োজনীয়তা বা সম্পর্কগুলি সহজ ক্ষেত্রে কাজ করা মডেলগুলি এবং সম্পর্কগুলিকে ব্যাপকভাবে প্রভাবিত করতে পারে।


আমি সম্মত তবে এটির একটি ছোট উদাহরণ একটি বিশ্বকে মডেল করার চেষ্টা করছে না। উদাহরণস্বরূপ আপনার কাছে এমন একটি শার্ক থাকতে পারে যা টায়ার এবং লাইসেন্স প্লেট খায়। আপনি কেবল কোনও পদ্ধতিতে কোনও পিতামাতার বিমূর্ত শ্রেণি তৈরি করতে পারেন যা কোনও ধরণের বস্তু খায় এবং খাদ্য এই বিমূর্ত শ্রেণিকে প্রসারিত করতে পারে।
hagensoft

@ হেজেনসফট: সম্মত আমি কখনও কখনও বাহিত হয়ে যাই কারণ আমি ক্রমাগত ডেভেলপারদের রূপকের উপর ভিত্তি করে মডেলিং করতে দেখি যা তারা তত্ক্ষণাত দখল করে নিয়েছে, কীভাবে ডেটা কীভাবে গ্রহন করা এবং ব্যবহার করা প্রয়োজন তা না দেখে। তারা প্রাথমিক ধারণার ভিত্তিতে একটি ওও ডিজাইনের সাথে বিবাহবন্ধনে আবদ্ধ হয় এবং তারপরে সমস্যাটিকে সমাধানের পরিবর্তে সমস্যার সমাধানের পরিবর্তে সমস্যাটি সমাধান করার চেষ্টা করে এবং জোর করে।
ডায়েটবুদ্ধ

1

ইসিএস রচনা-ওভার-ইনহেরিটেন্স পদ্ধতির:

An entity is a collection of components.
Systems process entities through their components.

Lion has claws and fangs as weapons.
Lion has meat as food.
Lion has a hunger for meat.
Lion has an affinity towards other lions.

Deer has antlers and hooves as weapons.
Deer has meat as food.
Deer has a hunger for plants.

Grass has plant as food.

pseudocode:

lion = new Entity("Lion")
lion.put(new Claws)
lion.put(new Fangs)
lion.put(new Meat)
lion.put(new MeatHunger)
lion.put(new Affinity("Lion"))

deer = new Entity("Deer")
deer.put(new Antlers)
deer.put(new Hooves)
deer.put(new PlantHunger)

grass = new Entity("Grass")
grass.put(new Plant)

Natureএকটি হ'ল systemযা এই সত্তাগুলির মধ্য দিয়ে লুপ করে একটি সাধারণীকরণ ক্যোয়ারী ফাংশনের মাধ্যমে তাদের কী উপাদান রয়েছে তা সন্ধান করে। Natureমাংসের ক্ষুধায় থাকা সংস্থাগুলি তাদের অস্ত্র ব্যবহার করে মাংসযুক্ত অন্যান্য সত্তাকে আক্রমণ করার জন্য কারণ হিসাবে তাদের সত্তার প্রতি সান্নিধ্য না থাকে will আক্রমণটি সফল হলে, সত্তাটি তার শিকারটিকে খাওয়াবে, এমন সময়ে শিকারটি মাংস থেকে বঞ্চিত লাশে পরিণত হবে। Natureউদ্ভিদগুলির যেমন খাদ্য হিসাবে উদ্ভিদ রয়েছে তাদের খাওয়ানোর জন্য উদ্ভিদের ক্ষুধার্ত সংস্থাগুলি সৃজন করবে provided

Nature({lion, deer, grass})

Nature(entities)
{
    for each entity in entities:
    {
       if entity.has("MeatHunger"):
           attack_meat(entity, entities.with("Meat", exclude = entity))
       if entity.has("PlantHunger"):
           eat_plants(entity, entites.with("Plant", exclude = entity))
    }
}

সম্ভবত আমরা Grassসূর্যালোক এবং জলের প্রয়োজন বর্ধিত করতে চাই এবং আমরা আমাদের পৃথিবীতে সূর্যালোক এবং জল প্রবর্তন করতে চাই। তবুও Grassএগুলি সরাসরি অনুসন্ধান করতে পারে না, যেমনটি নেই mobilityAnimalsজলের প্রয়োজনও হতে পারে তবে তারা যেহেতু সক্রিয়ভাবে এটি অনুসন্ধান করতে পারে mobility। পুরো ডিজাইনের ক্যাসকেডিং ব্রেকেস ব্যতীত এই মডেলটিকে প্রসারিত এবং পরিবর্তন করা আমাদের পক্ষে বেশ সহজ, যেমন আমরা কেবল নতুন উপাদান যুক্ত করি এবং আমাদের সিস্টেমগুলির আচরণের (বা সিস্টেমের সংখ্যা) প্রসারিত করি।


0

একাধিক উত্তরাধিকার ব্যবহার এবং অবজেক্ট ওরিয়েন্টেড ডিজাইন ব্যবহার করে আপনি কীভাবে এই সমস্যার সমাধান করবেন?

বেশিরভাগ জিনিসের মতো এটি নির্ভর করে

এটি আপনি 'এই সমস্যাটি' কী হতে দেখছেন তার উপর নির্ভর করে ।

  • এটি কি সাধারণ বাস্তবায়ন সমস্যা , যেমন আপনার নির্বাচিত প্ল্যাটফর্মে একাধিক উত্তরাধিকারের অনুপস্থিতি কীভাবে 'কাছাকাছি' যায়?
  • এটি কি এই নির্দিষ্ট ক্ষেত্রে যেমন কোনও নকশার সমস্যা রয়েছে , উদাহরণস্বরূপ কীভাবে প্রাণীগুলিও খাদ্য হিসাবে এটি মডেল করবেন?
  • এটি কী ডোমেন মডেলটির সাথে দার্শনিক সমস্যা , যেমন 'খাদ্য' এবং 'প্রাণী' বৈধ, প্রয়োজনীয় এবং কল্পনাযুক্ত ব্যবহারিক প্রয়োগের জন্য পর্যাপ্ত শ্রেণিবিন্যাস?

আপনি যদি সাধারণ বাস্তবায়ন সমস্যা সম্পর্কে জিজ্ঞাসা করেন তবে উত্তরটি আপনার পরিবেশের দক্ষতার উপর নির্ভর করবে। আইডিফুড এবং আইআনিমাল ইন্টারফেসগুলি উভয় ইন্টারফেস প্রয়োগ করে একটি এডিবলিমাল সাবক্লাস সহ কাজ করতে পারে। যদি আপনার পরিবেশ ইন্টারফেস সমর্থন করে না, কেবলমাত্র খাদ্য থেকে পশুকে উত্তরাধিকারী করুন।

আপনি যদি এই নির্দিষ্ট নকশা সমস্যার কথা জিজ্ঞাসা করছেন তবে কেবলমাত্র খাদ্য থেকে প্রাণীকে উত্তরাধিকারী করুন। এটি সম্ভবত সবচেয়ে সহজ কাজ যা কাজ করতে পারে।

আপনি যদি এই নকশা ধারণাগুলি সম্পর্কে জিজ্ঞাসা করছেন তবে উত্তরটি দৃ strongly়ভাবে নির্ভর করে আপনি মডেলটির সাথে কী করবেন। যদি এটি কুকুরের খাওয়ার-কুকুর ভিডিও গেম বা এমনকি চিড়িয়াখানায় খাওয়ার সময়সূচী ট্র্যাক করার জন্য অ্যাপ্লিকেশন হয় তবে এটি কাজ করার পক্ষে যথেষ্ট। যদি এটি প্রাণী আচরণগত নিদর্শনগুলির জন্য একটি ধারণামূলক মডেলের জন্য হয় তবে এটি সম্ভবত একটি শিশুর অগভীর।


0

উত্তরাধিকার হ'ল এমন কিছুর জন্য ব্যবহার করা উচিত যা সর্বদা অন্য কিছু, এবং পরিবর্তন হতে পারে না। ঘাস সবসময় খাবার নয়। যেমন আমি ঘাস খাই না।

ঘাস নির্দিষ্ট প্রাণীর জন্য একটি খাবারের ভূমিকা পালন করে


এটি ঠিক একটি বিমূর্ততা। যদি এটির প্রয়োজন হয় তবে আপনি আরও বিভাজন তৈরি করতে পারেন যা উদ্ভিদ বিমূর্ত শ্রেণি প্রসারিত করে এবং মানুষকে 'হিউম্যানইটেবল প্ল্যান্টস' এর মতো একটি বিমূর্ত শ্রেণি খেতে বাধ্য করে যা মানুষ গাছগুলিকে কংক্রিটের ক্লাসে খায় এমন গোষ্ঠীগুলিতে পরিণত করে।
hagensoft

0

আপনি সবেমাত্র ওওর প্রাথমিক সীমাবদ্ধতাটি পেরিয়ে এসেছেন।

ওও শ্রেণিবদ্ধ কাঠামোর সাথে ভাল কাজ করে। তবে একবার আপনি কঠোর শ্রেণিবিন্যাস থেকে সরে গেলে বিমূর্ততা এত ভাল কাজ করে না।

আমি রূপান্তর রচনাগুলি ইত্যাদি সম্পর্কে সমস্ত জানি যা এই সীমাবদ্ধতার আশেপাশের জন্য ব্যবহার করা হয় তবে সেগুলি আনাড়ি এবং আরও গুরুত্বপূর্ণভাবে অস্পষ্ট এবং কোড অনুসরণ করা শক্ত হয়ে যায়।

মূলত কঠোর শ্রেণিবদ্ধ কাঠামোর সীমাবদ্ধতা থেকে দূরে সরে আসার জন্য সম্পর্কিত তথ্য ভিত্তি আবিষ্কার করা হয়েছিল।

উদাহরণস্বরূপ ঘাস একটি বিল্ডিং উপাদান, কাগজের কাঁচামাল, পোশাকের উপাদান, আগাছা বা শস্যও হতে পারে।

হরিণ পোষা প্রাণী, পশুপাখি, চিড়িয়াখানার প্রাণী বা সুরক্ষিত প্রজাতি হতে পারে।

সিংহ চিড়িয়াখানার প্রাণী বা সুরক্ষিত প্রজাতিও হতে পারে।

জীবন সহজ নয়।


0

একাধিক উত্তরাধিকার ব্যবহার এবং অবজেক্ট ওরিয়েন্টেড ডিজাইন ব্যবহার করে আপনি কীভাবে এই সমস্যার সমাধান করবেন?

কি সমস্যা? এই সিস্টেমটি কী করে? আপনি উত্তর না দেওয়া পর্যন্ত আমার কোন ধারণা নেই যে কোন ক্লাসের প্রয়োজন হতে পারে। আপনি কি ভবিষ্যতে প্রজাতির জনসংখ্যা উপস্থাপন করে মাংসাশী, নিরামিষাশী এবং গাছপালা সহ একটি বাস্তুশাস্ত্র মডেল করার চেষ্টা করছেন? আপনি কি কম্পিউটারে 20 টি প্রশ্ন খেলার চেষ্টা করছেন?

কোনও ব্যবহারের ক্ষেত্রে সংজ্ঞা দেওয়ার আগে ডিজাইন শুরু করা সময় নষ্ট করা। আমি প্রায় দশজনের একটি দল যখন ছবিগুলির মাধ্যমে সফ্টওয়্যার ব্যবহার করে কোনও এয়ারলাইনের একটি ওও মডেল উত্পাদন শুরু করে তখন এটি হাস্যকর চূড়ান্ত দিকে নিয়ে যাওয়া দেখেছি। তারা প্রকৃত ব্যবসায়ের সমস্যা মাথায় না রেখে মডেলিংয়ের জন্য দুই বছর কাজ করেছিলেন। অবশেষে গ্রাহক অপেক্ষা করতে করতে ক্লান্ত হয়ে টিমকে একটি আসল সমস্যা সমাধানের জন্য বললেন। সমস্ত মডেলিং সম্পূর্ণ অকেজো ছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.