উপরে নীচে বা নীচে নকশা করা ভাল?


31

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

অনুশীলনে, দুটি পদ্ধতির একত্রিত করার পক্ষে এটি সর্বোত্তমভাবে বলা হয়: ডোমেন জ্ঞান, এর সম্পর্ক এবং সীমাবদ্ধতাগুলি সম্পূর্ণরূপে নির্দিষ্ট করার জন্য উচ্চ স্তরের স্পেসিফিকেশন দিয়ে শুরু হয়। সমস্যাটি ভালভাবে বোঝা গেলে, সিস্টেমটি তৈরির জন্য ক্ষুদ্রতম বিল্ডিং ব্লক তৈরি করা হয়।

পদ্ধতি:

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

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

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

পল গ্রাহাম তাঁর প্রবন্ধের প্রোগ্রামিং বটম আপে , নীচে থেকে সম্পূর্ণরূপে বিল্ডটি উত্সাহিত করতে, বা নীচে থেকে এটি প্রোগ্রাম করার কথা বলে মনে হচ্ছে, তবে প্রয়োজনীয় বিশ্লেষণ / নকশা পর্যায়ে নয়:

অভিজ্ঞ লিস্প প্রোগ্রামাররা তাদের প্রোগ্রামগুলি আলাদাভাবে বিভক্ত করে। টপ-ডাউন ডিজাইনের পাশাপাশি, তারা এমন একটি নীতি অনুসরণ করে যা নীচে-আপ ডিজাইন বলা যেতে পারে - সমস্যার সাথে মানানসই ভাষা পরিবর্তন করে।

আমি যতদূর পেলাম, তার মানে কী যে লিস্পার এখনও টপ-ডাউন ডিজাইন সম্পাদন করে তবে প্রোগ্রামটি নীচে আপ, এটি কি সত্য? আরেকটি বিষয় তিনি লিখেছেন:

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

এর অর্থ কি লিস্পে কোনও প্রোগ্রাম লেখার সময় আপনি জেনেরিক সরঞ্জাম দিয়ে শেষ করেছেন?


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

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

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

উত্তর:


35

টপ-ডাউনটি আপনার জানা জিনিসগুলি বর্ণনা করার বা আপনি ইতিমধ্যে নির্মিত জিনিসগুলিকে পুনর্নির্মাণের দুর্দান্ত উপায়।

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

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

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

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

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

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

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

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

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

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

এখন এই সমস্যার সমাধানের সাধারণ কাঠামোটি ডিজাইনের চেষ্টা করুন এবং অর্থ এবং সময় হিসাবে একটি উদ্ধৃতি দিন। আমার বাজি হ'ল এমনকি আপনার সিস্টেমের আর্কিটেকচার ... (হ্যাঁ, আর্কিটেকচার) ভুল হবে। ব্যয় এবং সময় অনুমান এলোমেলো সংখ্যা হবে।

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

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

আপনি সম্ভবত একই সমস্যা সমাধান করতে পারেন। কাজ যদিও নীচে আপ। আপনি যা জানেন তা দিয়ে শুরু করে, আপনি কী না শিখছেন এবং যুক্ত করছেন adding

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

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

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

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

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

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

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


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

স্পষ্টভাবে পরিচিত কিছু হিসাবে পুনর্নির্মাণের জন্য টপ-ডাউন ঠিক আছে। আপনার ওয়েব ব্রাউজার এটির একটি উদাহরণ। এমনকি সি ++ এর মতো এমন একটি ভাষা ব্যবহার করা যা আপনাকে আপনার প্রোগ্রামের সমস্ত ভেরিয়েবলের মধ্যে থাকা মানগুলির জন্য সমস্ত ধরণের প্রত্যাশা করতে এবং আনুষ্ঠানিকভাবে নির্দিষ্ট করতে (একটি ভয়ঙ্কর সিনট্যাক্স ব্যবহার করে) বাধ্য করে still এটি এখনও একটি কার্যকর বিকল্প।
6502

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

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

1
হাই মিঃ 6502 এক বছর পরে, আমি আরও জিনিস শিখতে শুরু করেছিলাম, আপনি কী বলেছিলেন তা সত্যবাদী হতে শুরু করি। আমি আর একটি থ্রেড তৈরি করেছি: প্রোগ্রামার.সটাকেক্সচেঞ্জ / প্রশ্নগুলি / 179000/… । আপনার যদি সময় থাকে তবে আমি আশা করি আপনি আবার আমার চিন্তাভাবনা পরিষ্কার করবেন: ডি।
আম্মু

6

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

যাইহোক, অন্য কয়েকটি জবাবের বিপরীতে যা এই সিদ্ধান্তে পৌঁছে যে টপ-ডাউন পদ্ধতির অর্থ প্রথম মিথস্ক্রিয়াতে আপনি কেবল নথি এবং সামগ্রিক নকশা সরবরাহ করেন, বইটি অন্য পদ্ধতির দিকে ইঙ্গিত করে: টিডিডি বিবর্তনীয় নকশার সাথে মিলিত।

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

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

আপনি যদি এক্সপি এবং বিবর্তনমূলক নকশা সম্পর্কে আরও পড়তে আগ্রহী হন তবে মার্টিন ফাউলারের আরেকটি দুর্দান্ত লেখক এখানে একটি ভাল পঠন পাবেন: "ডিজাইনটি কি মারা গেছে?"


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

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

3

আমার কাছে, পল গ্রাহাম তার নিবন্ধে সবচেয়ে গুরুত্বপূর্ণ মন্তব্যগুলি হলেন:

[...] লিসপ প্রোগ্রামাররা [...] এমন নীতি অনুসরণ করেন যা বলা যায় নীচে আপ ডিজাইন - সমস্যার সাথে মানানসই ভাষা পরিবর্তন করা। লিস্পে, আপনি কেবল আপনার প্রোগ্রামটি ভাষার দিকে লিখবেন না, আপনি আপনার প্রোগ্রামটির দিকেও ভাষাটি তৈরি করুন।

বা, যেমন এটি সি ++ চেনাশোনাগুলিতে জানা যায়: লাইব্রেরি ডিজাইন হ'ল ল্যাঙ্গুয়েজ ডিজাইন (বজর্ন স্ট্রস্ট্রপ)

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

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


2

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

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

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

মনে রাখবেন যে আসল গাড়ি এবং আসল চাকাগুলির সাথে অসদৃশ, যদি আপনি একটি সফ্টওয়্যার "চাকা" তৈরি করেন তবে আপনি তাদের একটি অসীম সংখ্যা তৈরি করেছেন।

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

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

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


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

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

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

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

আসুন একটি উদাহরণ নেওয়া যাক: ধরুন আমরা কোনও ক্লায়েন্ট / সার্ভার অ্যাপ্লিকেশন লিখছি। আমাদের প্রথম জিনিসটি এক্সচেঞ্জ বার্তাগুলির সংজ্ঞা দিয়ে, কীভাবে বার্তাটি মেমরিতে রাখা হয় (যেমন শিরোনাম 16 বাইট, আইডি 4 বাইট ....) দ্বারা প্রোটোকল সনাক্ত করতে হবে। চিত্রটি মডেলিং / পরিকল্পনার সমান নয়: abstratt.com/blog/2009/05/03/on-code-being-model । মডেল করার জন্য আমাদের ইউএমএল বা ডায়াগ্রাম ব্যবহার করার দরকার নেই, যেহেতু ইউএমএল বেশিরভাগ ক্ষেত্রে কেবল ওওপি-তে মনোনিবেশ করে এবং ইউএমএল শ্রেণির ডায়াগ্রামে টাইপ করার সময়টি যদি না হয় তবে প্রকৃত কোড টাইপ করার চেয়ে কম নয় more
আমুমু

1

পুনরাবৃত্ত বিকাশের সাথে শীর্ষে-ডাউন পদ্ধতির সাথে কী ভুল?

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

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

পল গ্রাহাম নীচে থেকে সম্পূর্ণরূপে বিল্ড উত্সাহিত করেছিলেন? অথবা কেবল নীচ থেকে এটি প্রোগ্রাম করুন, তবে প্রয়োজনীয় বিশ্লেষণ / ডেসিং পর্ব নয়?

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

এর অর্থ, লিস্পে একটি প্রোগ্রাম লেখার সময়কালে, আপনি একটি জেনেরিক সরঞ্জাম দিয়ে শেষ করেন যা মূলটির অনুরূপ প্রোগ্রামগুলি লেখার জন্য ব্যবহার করা যেতে পারে, তাই না?

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


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