কোনও ওওপি সিস্টেম কোড করার আগে ডিজাইনের সহজ প্রক্রিয়া কী?


10

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

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

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


8
"এখন আমি জানি এটি সফ্টওয়্যার তৈরির সঠিক উপায় নয়" - আপনাকে এ কথা কে বলেছে? মনে হয় কোনওভাবেই আপনি বিশ্বাসের জনপ্রিয় ফাঁদে পড়ে যাচ্ছেন "নকশাই কোডিংয়ের আগে আপনি যা করেন তা সম্ভবত অভিনব ইউএমএল চিত্রগুলি আঁকিয়ে"। আপনাকে এই ভুল ধারণা থেকে নিরাময় করতে, আমি জ্যাক রিভসের "কোড হিসাবে নকশা" দিয়ে শুরু করার পরামর্শ দিই ।
ডক ব্রাউন


@DocBrown। কোডিং করার সময় আপনি কি মনে করেন না যে এই নকশাই আমাদের কাজকে এতটা কারুকার্য করে তোলে? আমি অন্যান্য ইঞ্জিনিয়ারগুলি একইভাবে কাজ করার কথা ভাবতে পারি না। কোনও স্থপতি ইট এবং মর্টার পিলিং এবং পথে বিল্ডিং / ব্রিজ ডিজাইনের কল্পনা করুন।
লাইভ

5
@ লাইভ: "কোডিং" অন্য ইঞ্জিনিয়ার শাখায় যে নকশাকে বলা হয় তারই একটি অংশ । বাড়ির বিল্ডিংয়ে, নকশা থেকে শেষের দিকে পদক্ষেপটি পিলিং ইট এবং মর্টার ব্যবহার করে করা হয়। প্রোগ্রামিংয়ে, এই পদক্ষেপটি কম্পাইলার দ্বারা শেষ পণ্যটিতে (= এক্সিকিউটেবল বাইনারি) অনুবাদ করার সময় সংকলক দ্বারা সম্পন্ন করা হয়। এবং এটি কোনও নতুন জ্ঞান নয়। রিভস প্রবন্ধগুলি 25 বছর বয়সী।
ডক ব্রাউন

@ ডকব্রাউন, কি বিকাশকারী? * আর কি আর কিউরেটেড হয় না? সাবস্ক্রাইব বোতামটি উদাহরণস্বরূপ ভাঙা।
রাডারবাব

উত্তর:


20

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

যদি কোনও ক্লাসে ডাইভিং করা আপনার কোডটি পছন্দ করে তবে তা হয়ে উঠুন so আমি আপনাকে একটি ইঙ্গিত বলতে দিন। গড়িমসি।

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

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

আপনি যদি সেই ভাবনার মোডে উঠতে পারেন তবে যা বাকী রয়েছে তা হল আর্কিটেকচার। আমরা সবাই এখনও এটি সন্ধান করছি। এমভিসি থেকে শুরু করে ডোমেন চালিত নকশায় আর্কিটেকচার পরিষ্কার করুন। তাদের অধ্যয়ন এবং খেলা। যা কাজ করে তা ব্যবহার করুন। আপনি যদি 100% নির্ভরযোগ্য কিছু খুঁজে পান তবে ফিরে আসুন এবং আমাকে জানান। কয়েক দশক ধরে এটি করা হয়েছে এবং আমি এখনও খুঁজছি।


2
অথবা আপনি নিজেকে OO করছেন না এবং এখনও "কোনও না কোনওভাবে" সবকিছুই ঠিকঠাক কাজ করে দেখছেন ...
ডেরেক এলকিনস SE

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

এটি কেবল নীচে নয়। আপনাকে কেবলমাত্র পরামিতিগুলি গ্রহণ করে যে জিনিসগুলির জন্য জিজ্ঞাসা করতে পারেন তা তৈরি করতে ইচ্ছুক হতে হবে।
candied_orange

@ পাইভজান আপনি এই কাজটি করতে পারেন এমনকি যখন ইন্টারফেসটির অস্তিত্ব নেই। কিছুটা হলেও আপনার সংকলকটিকে উপেক্ষা করুন। পরে, আপনি এটি বিদ্যমান করতে পারবেন make
candied_orange

@ ক্যান্ডিওড অরেঞ্জ "আপনাকে প্যারামিটারগুলি গ্রহণ করে যে জিনিসগুলির জন্য জিজ্ঞাসা করতে পারে তা তৈরি না করতেও আপনাকে প্রস্তুত থাকতে হবে।" - আমি নিশ্চিত যে আমি বুঝতে পেরেছি না, আপনি কি দয়া করে স্পষ্ট করে বলতে পারেন / একটি সংক্ষিপ্ত উদাহরণ সরবরাহ করতে পারেন (বা সেই বিষয়ে পাল্টা উদাহরণ)?
পাইভজান

4

আপনি নিজের কোডে অবজেক্ট-ওরিয়েন্টেড কৌশলগুলি ব্যবহার করতে সক্ষম হবেন বলে দাবি করেছেন, সুতরাং আপনি ইতিমধ্যে কোনও বস্তু-কেন্দ্রিক সিস্টেমটি কীভাবে ডিজাইন করতে পারবেন তা জানেন , আমি বিশ্বাস করি যে আপনার সমস্যাটি কখন কী তা করতে পারে কিনা তা নয় of আপনি দীর্ঘমেয়াদী পরিকল্পনার পরিবর্তে স্বল্প-মেয়াদী পুনরাবৃত্ত পদ্ধতিতে অবজেক্ট-ওরিয়েন্টেড ডিজাইনের সাথে স্বাচ্ছন্দ্যবোধ করেন।

যখন প্রথম কোনও প্রকল্প বিকাশ করা যায় তখন পরিকল্পনা এবং নকশা করা খুব কঠিন হতে পারে, তখনই জলপ্রপাতের বিকাশের পক্ষে চতুর বিকাশকে সমর্থন করা হয় , কারণ একটি জলপ্রপাতের পরিকল্পনার বিশাল সুযোগটি প্রায়শই কোনও সফ্টওয়্যার প্রকল্পের সমস্ত জটিলতাকেই ক্যাপচার করে না।

আপনি জোর দিয়েছিলেন যে "প্রাথমিক পরিকল্পনা" ছাড়াই ফ্লাই অব বিকাশ হ'ল:

"... সফ্টওয়্যার তৈরির সঠিক উপায় নয় ..."

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

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

ব্যক্তিগতভাবে আমি আপনার ডিজাইনগুলি পুরোপুরি অবজেক্ট-ভিত্তিক হওয়ার বিষয়ে চিন্তা না করার পরামর্শ দিচ্ছি, বেশিরভাগ সিস্টেমগুলি 100% অবজেক্ট-ভিত্তিক নয়। লক্ষ্যটি হ'ল সিস্টেমটির আরও ভাল বোঝাপড়া এবং দৃশ্যায়ন তৈরি করা, নিখুঁত বিমূর্ততা নয়। অবজেক্ট-ওরিয়েন্টেশন রৌপ্য বুলেট নয়, এটি বেল্টের আরও একটি সরঞ্জাম।


আমিও উল্লেখ করতে চেয়েছিলাম, যদিও উত্তরের জন্য কিছুটা অফ-টপিক ... আপনার পরিকল্পনাগুলি খুব বড় হওয়ার দরকার নেই! কখনও কখনও একটি পরিকল্পনা কেবল "আমি এটি চালাতে চাই এবং এটি একটি কাজ করে" একটি বিষয়। এটি যথেষ্ট ভাল, যদি এটি সত্যিই সব করতে চলেছে।
এরদরিক আয়রনরোজ

2

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

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

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

আপনি নিম্নলিখিত প্রশ্নের যে কোনও প্রশ্নের হ্যাঁ উত্তর দিলে আপনার ক্লাস ব্যবহার করা উচিত:

  • আমার কাছে কি এমন একটি গ্রুপের তথ্য রয়েছে যা একই ধারণার সাথে সম্পর্কিত (যেমন প্রথম নাম, শেষ নাম, ঠিকানা)?
  • আমার কি বেশ কয়েকটি টুকরো তথ্যের (যেমন calculatePrice(basePrice, quantity, tax)) প্রয়োজনীয় অপারেশন করা দরকার ?
  • একই কোড বা অনুরূপ তথ্যের (যেমন if(type == "cat") { meow(name); } else if (type == "dog") { bark(name); }==> animal.speak()) দিয়ে বড় কোড ব্লকগুলি কিছুটা পৃথক ক্রিয়াকলাপ সম্পাদন করে থাকলে আমার কি অন্য কিছু আছে?
  • আমার কি বিদ্যমান ক্লাস আছে যা একাধিক নির্দিষ্ট কাজ সম্পাদন করে এবং কিছুটা বড় হয়?

কিছুক্ষণ পরে, এটি ক্লাস তৈরির দ্বিতীয় প্রকৃতি হয়ে উঠবে। যদি আপনার কোড উপরের যে কোনও একটির ক্ষেত্রে পড়ে তবে সেগুলি ব্যবহার করতে ভয় পাবেন না। আমি আশা করি এটি সাহায্য করবে!


2

আমি মনে করি যে মন্তব্যগুলিতে ডক ব্রাউন দ্বারা করা পয়েন্টগুলি একটি মন্তব্যের চেয়ে অনেক বেশি দৃশ্যমানতার দাবি রাখে কারণ তিনি একেবারে সঠিক:

" এখন আমি জানি এটি সফ্টওয়্যার তৈরির সঠিক উপায় নয় " - আপনাকে এ কথা কে বলেছে? মনে হয় কোনওভাবেই আপনি বিশ্বাসের জনপ্রিয় ফাঁদে পড়ে যাচ্ছেন "নকশাই কোডিংয়ের আগে আপনি যা করেন তা সম্ভবত অভিনব ইউএমএল চিত্রগুলি আঁকিয়ে"। আপনাকে এই ভুল ধারণা থেকে নিরাময় করতে, আমি জ্যাক রিভসের "কোড হিসাবে নকশা" দিয়ে শুরু করার পরামর্শ দিই । - ডক ব্রাউন 21 জুন 5:27 এ

@ লাইভ: "কোডিং" অন্য ইঞ্জিনিয়ার শাখায় যে নকশাকে বলা হয় তারই একটি অংশ। বাড়ির বিল্ডিংয়ে, নকশা থেকে শেষের দিকে পদক্ষেপটি পিলিং ইট এবং মর্টার ব্যবহার করে করা হয়। প্রোগ্রামিংয়ে, এই পদক্ষেপটি কম্পাইলার দ্বারা শেষ পণ্যটিতে (= এক্সিকিউটেবল বাইনারি) অনুবাদ করার সময় সংকলক দ্বারা সম্পন্ন হয়। এবং এটি কোনও নতুন জ্ঞান নয়। রিভস প্রবন্ধগুলি 25 বছর বয়সী। - ডক ব্রাউন 21 জুন 6:39 এ

এই একই অনুভূতি অন্যান্য জায়গায়ও প্রতিধ্বনিত। "রিয়েল সফটওয়্যার ইঞ্জিনিয়ারিং", এবং কিছুটা তার "ক্র্যাফট, ইঞ্জিনিয়ারিং, এবং প্রোগ্রামিংয়ের এসেন্সেন্ট" এবং "ক্র্যাফট এবং সফটওয়্যার ইঞ্জিনিয়ারিং" আলোচনার বিষয়ে গ্লেন ভ্যান্ডারবার্গের আলোচনা বিবেচনা করুন। এছাড়াও বিবেচনা WhatIsSoftwareDesign এবং TheSourceCodeIsTheDesign পৃষ্ঠা / C2 এ উইকি আলোচনা।

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

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

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


1

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

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

কার্যনির্বাহী কোনও ওওর পদ্ধতির মধ্যে একটি মূল পার্থক্য হ'ল সাধারণত প্রক্রিয়াগত চিন্তাভাবনার মানচিত্রগুলি পর্দার জন্য প্রয়োজন হয়, অন্যদিকে, ওওডির প্রবণতাটি অন্য ব্যক্তির দ্বারা তৈরি করা বা একটি অ-ওও ফ্যাশনে সামনের প্রান্তটি ছেড়ে কী হবে তা ভাবার প্রবণতা রয়েছে।

এক্সট্রিম প্রোগ্রামিংয়ে একটি কৌশল রয়েছে যার নাম সিআরসি কার্ড । সিআরসি মানে "শ্রেণি-দায়িত্ব-সহযোগী"।

মূলত আপনি স্পষ্ট ক্লাসগুলি সনাক্ত করে এবং প্রত্যেককে একটি কার্ড বরাদ্দ করেন। বলুন, ক্লাসটির Invoiceনিজস্ব কার্ড রয়েছে।

প্রতিটি কার্ড-হোল্ডিং ক্লাসের জন্য আপনি লেখেন যে সেই শ্রেণীর দায়বদ্ধতাগুলি কী হবে, উদাহরণস্বরূপ "গ্র্যান্ড টোটাল গণনা করুন"

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

আপনি আবিষ্কার করতে পারেন যে কিছু দায়বদ্ধতা যা আপনি ভাবেন Invoceসেগুলি সত্যই এর সহযোগীদের অন্তর্ভুক্ত।

অনুশীলনের পরে, প্রতিটি কার্ড একটি শ্রেণিতে পরিণত হয়, প্রতিটি দায়বদ্ধতা একটি পদ্ধতিতে পরিণত হয় এবং প্রতিটি সহযোগিতার সম্পর্কটি একটি রচনা, একটি সংগঠন বা নিছক কল হয়ে যেতে পারে।

এই উদ্ধৃতিটি একটি গোষ্ঠীতে করা যেতে পারে (এবং হওয়া উচিত), যেখানে এমনকি ব্যবসায়ীরাও অংশ নেন।

আপনি এই লিঙ্কগুলিতে এই কৌশল সম্পর্কে আরও শিখতে পারেন:

http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card

http://www.extremeprogramming.org/rules/crccards.html

সিআরসি কার্ডের উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


0

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

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

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

অটোমোবাইল প্রস্তুতকারকের উদাহরণ নিন যিনি বিভিন্ন বিভাগে গাড়ি চালিয়েছেন: বাণিজ্যিক যানবাহন, গ্রাহক গাড়ি (সেডানস, হ্যাচব্যাক, স্টেশন ওয়াগনস) ইত্যাদি etc.

নির্মাতার স্পষ্টভাবে বিভাগ এবং উদ্দেশ্য পৃথকীকরণের জন্য, একাধিক উপায় রয়েছে যার সাহায্যে তারা সেখানে ক্লাস তৈরি করতে পারে।

যানবাহন প্রস্তুতকারক OOAD

  1. গাড়ির ক্যাটাগরি (মার্কেট সেক্টর) এর ভিত্তিতে: ভারী যানবাহন, গ্রাহক যানবাহন [সেডান, হ্যাচব্যাক, স্টেশন-ওয়াগন ইত্যাদি]

  2. ইঞ্জিন ক্ষমতা এবং ড্রাইভিং পদ্ধতির উপর ভিত্তি করে: 800-1500 সিসি,> 1500 সিসি ইত্যাদি

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


আপনি ঠিকঠাক শুরু করেছেন, তবে তারপরে শেষ বিটটি দেখতে হবে এমন অসতর্কতার মতো যা ওওড একই রকম আচরণগুলি গোষ্ঠীকরণের পরিবর্তে জিনিসগুলিকে শ্রেণিবদ্ধকরণের বিষয়ে।
পিট কিরখাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.