আপনি কীভাবে অবজেক্ট ভিত্তিক প্রকল্পগুলি ডিজাইন করেন? [বন্ধ]


231

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

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

পূর্ববর্তী প্রকল্পগুলির সাথে আমি কোর্স থেকে শিখেছি পদ্ধতিগুলি ব্যবহার করার চেষ্টা করেছি তবে সাধারণত কোড দিয়ে শেষ হয় যে যতক্ষণ না আমি বলতে পারি "হ্যাঁ যা আমার মনে মনে ছিল এমন কিছু দেখায়" আমার যুক্ত করার মতো গোড়ালি দিয়ে খোঁড়া করার কোনও ইচ্ছা নেই নতুন বৈশিষ্ট.

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

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

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


2
আমি ভেবেছিলাম কোড কমপ্লিটটি এই বিষয়ে বেশ সহায়ক ছিল - বিশেষত অধ্যায় 5.3 এবং 5.4 (যার আরও কয়েকটি সুনির্দিষ্ট পরামর্শ রয়েছে) এবং পুরো অধ্যায় 6 However তবে, আমি আসলে কোনও বড় প্রকল্পের জন্য কোনও কোড ডিজাইন করি নি।
পল ডি ওয়েট

1
আমি জাভাতে অবজেক্ট ওরিয়েন্টেড ডিজাইনে কোর্স করার পরামর্শ দিতে পারি। UDEMY udemy.com/mastering-object-oriented-design-in-java/… এ একটি দুর্দান্ত প্রকাশিত হয়েছে । আমি মনে করি এটি অবশ্যই আপনাকে সহায়তা করতে পারে। আর একটি দুর্দান্ত সংস্থান এটিএম অবজেক্ট ওরিয়েন্টড সমস্যাটি চেষ্টা করা। আপনি এটি গুগল করতে পারেন।
ঘোড়া ভয়েস

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

উত্তর:


199

আমি প্রাথমিক নকশার জন্য (ক্লাস ডায়াগ্রামে উঠার জন্য) যে পদক্ষেপগুলি ব্যবহার করি তা হ'ল:

  1. প্রয়োজনীয়তা জমায়েত। ক্লায়েন্টের সাথে কথা বলুন এবং সফ্টওয়্যারটির কী কার্যকারিতা থাকতে হবে তা নির্ধারণ করতে ব্যবহারের ক্ষেত্রে ফ্যাক্টর দিন।

  2. স্বতন্ত্র ব্যবহারের ক্ষেত্রে একটি বিবরণ রচনা করুন।

  3. বর্ণনাকারীর মধ্য দিয়ে যান এবং বিশেষ্য (ব্যক্তি, স্থান, জিনিস), প্রার্থী শ্রেণি এবং ক্রিয়া (ক্রিয়া) হিসাবে, পদ্ধতি / আচরণ হিসাবে হাইলাইট করুন।

  4. সদৃশ বিশেষ্যগুলি ত্যাগ করুন এবং সাধারণ কার্যকারিতা নির্ধারণ করুন।

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

  6. আপনার ক্লাসগুলি সংগঠিত করতে OOD নীতিগুলি প্রয়োগ করুন (সাধারণ কার্যকারিতা নির্ধারণের জন্য, স্তরক্রমগুলি তৈরি করা ইত্যাদি)


6
এটি প্রকৃতপক্ষে একটি কার্যকর কৌশল, বিশেষত যখন আপনার সমস্যার ডোমেনটিতে আসল হ্যান্ডেল না থাকে। তবে এটি খুব কমই একটি অনুকূল স্থাপত্য উত্পাদন করে।
নাম্বার

1
আমি জাভাতে অবজেক্ট ওরিয়েন্টেড ডিজাইনে কোর্স করার পরামর্শ দিতে পারি। UDEMY udemy.com/mastering-object-oriented-design-in-java/… এ একটি দুর্দান্ত প্রকাশিত হয়েছে। আমি মনে করি এটি অবশ্যই আপনাকে সহায়তা করতে পারে। আর একটি দুর্দান্ত সংস্থান এটিএম অবজেক্ট ওরিয়েন্টড সমস্যাটি চেষ্টা করা। আপনি এটি গুগল করতে পারেন।
ঘোড়া ভয়েস

1
আপনি কোথায় এটি শিখেন? আপনি কি এর উত্স প্রদান করতে পারেন?
কানগাভেলু সুগুমার

68

স্কট ডেভিস যা বলেছিলেন তা যুক্ত করে:

  1. আপনার প্রোগ্রামটি শুরুর আগে আপনার প্রোগ্রামটি কী সে সম্পর্কে আপনি পুরোপুরি নিশ্চিত হন Make কি হয় আপনার প্রোগ্রাম? এটা কি হবে না হবে? এটি কোন সমস্যার সমাধান করার চেষ্টা করছে?

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

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

  4. একবার আপনি ব্যবহারের কেস এবং অবজেক্টের সর্বনিম্ন সেট পেয়ে গেলে কোডিং শুরু করুন। এমন কিছু পান যা বাস্তবে যত তাড়াতাড়ি সম্ভব চালিত হয়, যদিও এটি খুব বেশি কিছু করে না এবং সম্ভবত শঙ্কিত দেখাচ্ছে like এটি একটি সূচনা পয়েন্ট এবং আপনাকে কাগজের উপর চকচকে করা প্রশ্নগুলির উত্তর দিতে বাধ্য করবে।

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

শুধু আমার দুই সেন্ট। আশা করি এটি কার্যকর।


19

আমার যখন সুযোগ ছিল, আমি সাধারণত "তিনটি পুনরাবৃত্তির বিধি" বলি তা ব্যবহার করি।

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

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

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

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

সুতরাং সংক্ষেপে:

  1. পুনরাবৃত্তির প্রথমটিতে আপনি এটির স্বাদ পাবেন এবং শিখবেন
  2. পুনরাবৃত্তির ক্ষেত্রে, আপনি আপনার পণ্যটি পরিষ্কার করুন এবং এটি ভবিষ্যতের জন্য প্রস্তুত করুন
  3. তিনটি পুনরাবৃত্তিতে আপনি নতুন বৈশিষ্ট্য যুক্ত করুন এবং আরও শিখুন
  4. গোটো 2

16

এর সম্পর্কে আমি সবচেয়ে আকর্ষণীয় উত্সটি জানি যা অবজেক্ট ওরিয়েন্টেড সফটওয়্যার কনস্ট্রাকশন এর পার্ট ডি , বার্ট্র্যান্ড মেয়ারের দ্বিতীয় সংস্করণ

খণ্ড ডি: অবজেক্ট-ওরিয়েন্টেড পদ্ধতি: পদ্ধতিটি ভালভাবে প্রয়োগ করা

19: পদ্ধতিতে, 20: ডিজাইনের প্যাটার্ন: মাল্টি-প্যানেল ইন্টারেক্টিভ সিস্টেমগুলি, 21: উত্তরাধিকারী কেস স্টাডি: একটি ইন্টারেক্টিভ সিস্টেমে "পূর্বাবস্থাপন", 22: ক্লাসগুলি কীভাবে সন্ধান করতে হবে , 23: শ্রেণি নকশার নীতিমালা, 24: উত্তরাধিকার ভালভাবে ব্যবহার করা , 25: দরকারী কৌশল, 26: শৈলীর অনুভূতি, 27: অবজেক্ট-ওরিয়েন্টেড বিশ্লেষণ, 28: সফ্টওয়্যার নির্মাণ প্রক্রিয়া, 29: পদ্ধতি শেখানো

মজার বিষয় হল, অধ্যায় 22. কীভাবে ক্লাসগুলি সন্ধান করবেন তা অনলাইনে উপলব্ধ।


12

এটি প্রায়শই পুনরাবৃত্তি হলেও সম্পূর্ণ সত্য - আপনার ডেটা বুঝুন।

ওওপি-র জন্য আপনার ক্লাসগুলিতে তথ্যের টুকরো টুকরো এবং তারা কীভাবে ইন্টারঅ্যাক্ট করে তা বর্ণনা করা উচিত।

আপনার যদি এমন মানসিক মডেল থাকে যা ডেটার আচরণ এবং জীবনকালকে ভালভাবে বর্ণনা করে তবে আপনার ক্লাসগুলি ছড়িয়ে দেওয়ার জন্য একটি সহজ যাত্রা হবে have

এটি কেবলমাত্র একটি এক্সটেনশান: আপনি কী করতে চাইছেন তা ঠিক তা জানুন।


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

এটি একটি গুরুত্বপূর্ণ পার্থক্য, তবে এর অর্থ এই নয় যে ডেটাটির চেয়ে আচরণটি গুরুত্বপূর্ণ is
জননি

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

10

আচরণ চালিত বিকাশ ব্যবহার করে দেখুন। আপনার পুরানো অভ্যাসটি ভাঙ্গা শক্ত হবে তবে আমি খুঁজে পেয়েছি যে সত্যিকারের বিশ্বে বিকাশের ক্ষেত্রে বিডিডি হ'ল সত্যই আপনার সেরা বাজি।

http://behaviour-driven.org/


1
+1 পরীক্ষা / আচরণ / ডোমেন চালিত বিকাশ ব্যবহার করে আপনি ক্লাস তৈরি করতে পারবেন যাতে আপনি সমস্যাযুক্ত বড় আপ ফ্রন্ট ডিজাইন জলপ্রপাত পদ্ধতিটি এড়াতে পারবেন।
হলভার্ড

8

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

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

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

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

অবশ্যই, যখন নতুন উপাদানগুলি সমাপ্ত হয়, আপনার পরীক্ষা করা উচিত কীভাবে (এবং যদি) তারা একে অপরের সাথে সংহত হওয়ার আগে before

খুব সংক্ষেপে: ওও এবং তথ্য গোপনীয়তার নীতিটি নিন এবং এটিকে অন্য স্তরে টানুন!


পিএস: ডিজাইন করার সময় প্রচুর স্কেচিং করুন, এটি ঠিক বাস্তব স্থাপত্যের মতো!

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


7

যুক্তিসঙ্গত সাফল্যের সাথে সত্যিকারের প্রকল্পগুলিতে আমি যে প্রযুক্তিটি ব্যবহার করেছি তা হ'ল ভার্ফস-ব্রকের বই থেকে অনুপ্রাণিত দায়বদ্ধতা ড্রাইভড ডিজাইন।

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

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

কখন থামবে তা জেনে রাখা বিচারের বিষয় (যা কেবল অভিজ্ঞতার সাথে আসে)।


হোয়াইটবোর্ডের জন্য +1, অসামান্য জিনিস: ডিআই হোয়াইটবোর্ডের সামনে বসে 80% সমস্যার সমাধান করে, কেবল এটি দেখছেন এবং ভেবেছিলেন 'সেরাটি কী হবে?'
usoban

7

নকশা নিদর্শন

সৃজনশীল ডিজাইনের প্যাটার্নস

সিঙ্গেলটন - নিশ্চিত করুন যে শ্রেণীর কেবলমাত্র একটি উদাহরণ তৈরি হয়েছে এবং বস্তুকে বিশ্বব্যাপী অ্যাক্সেস পয়েন্ট সরবরাহ করুন।

কারখানা (কারখানার পদ্ধতির সরলীকৃত সংস্করণ) - ক্লায়েন্টের কাছে ইনস্ট্যান্টেশন যুক্তিটি প্রকাশ না করে এবং একটি সাধারণ ইন্টারফেসের মাধ্যমে সদ্য নির্মিত বস্তুকে বোঝায় অবজেক্ট তৈরি করে।

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

অ্যাবস্ট্রাক্ট ফ্যাক্টরি - তাদের ক্লাসগুলি স্পষ্টভাবে উল্লেখ না করে সম্পর্কিত অবজেক্টগুলির পরিবার তৈরির জন্য ইন্টারফেস সরবরাহ করে।

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

প্রোটোটাইপ - প্রোটোটাইপিকাল দৃষ্টান্ত ব্যবহার করে তৈরি করতে বিভিন্ন ধরণের অবজেক্ট নির্দিষ্ট করুন এবং এই প্রোটোটাইপটি অনুলিপি করে নতুন অবজেক্ট তৈরি করুন।

আচরণের নকশার ধরণগুলি

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

কমান্ড - একটি বস্তুতে একটি অনুরোধ encapsulate, বিভিন্ন অনুরোধ সঙ্গে ক্লায়েন্টদের প্যারামিটারাইজেশন অনুমতি দেয় এবং একটি সারিতে অনুরোধগুলি সংরক্ষণ করার অনুমতি দেয়।

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

আইট্রেটার - একটি অন্তর্নিহিত উপস্থাপনাটি প্রকাশ না করে ক্রমান্বয়ে সামগ্রিক সামগ্রীর উপাদানগুলিতে অ্যাক্সেসের একটি উপায় সরবরাহ করুন।

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

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

কৌশল - অ্যালগরিদমগুলির একটি পরিবারকে সংজ্ঞায়িত করুন, প্রত্যেককে আবদ্ধ করুন এবং তাদেরকে বিনিময়যোগ্য করুন। কৌশলটি এটিকে ব্যবহার করে এমন ক্লায়েন্টদের থেকে অ্যালগরিদম স্বতন্ত্রভাবে পরিবর্তিত হতে দেয়।

টেমপ্লেট পদ্ধতি - একটি ক্রিয়াকলাপে একটি অ্যালগরিদমের কঙ্কাল সংজ্ঞায়িত করুন, সাবক্লাস / টেম্পলেট পদ্ধতিতে কিছু পদক্ষেপ স্থগিত করে উপক্লাসগুলি অ্যালগোরিদমের কাঠামো পরিবর্তন না করেই একটি অ্যালগরিদমের কয়েকটি ধাপ পুনরায় সংজ্ঞায়িত করতে দেয়।

ভিজিটর - কোনও অবজেক্ট স্ট্রাকচারের উপাদানগুলিতে সঞ্চালনের জন্য একটি অপারেশনকে প্রতিনিধিত্ব করে / ভিজিটর আপনাকে যে উপাদানগুলির উপর চালিত হয় তাদের ক্লাসগুলি পরিবর্তন না করেই আপনাকে একটি নতুন ক্রিয়াকলাপ সংজ্ঞায়িত করতে দেয়।

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

স্ট্রাকচারাল ডিজাইনের প্যাটার্নস

অ্যাডাপ্টার - ক্লাসের ইন্টারফেসটি অন্য ইন্টারফেসের ক্লায়েন্টদের প্রত্যাশায় রূপান্তর করুন। / অ্যাডাপ্টার ক্লাসগুলি একসাথে কাজ করতে দেয় যা অন্যথায় বেমানান ইন্টারফেসের কারণে পারে না।

ব্রিজ - অংশ-পুরো স্তরের শ্রেণিবিন্যাস উপস্থাপনের জন্য গাছের কাঠামোগুলিতে বস্তু রচনা করুন। / কম্পোজিট ক্লায়েন্টদের স্বতন্ত্র বস্তু এবং অবজেক্টগুলির রচনাগুলি সমানভাবে আচরণ করতে দেয়।

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

সাজসজ্জার - একটি বস্তুর গতিশীল অতিরিক্ত দায়িত্ব যুক্ত করুন।

ফ্লাইওয়েট - বড় বড় সংখ্যক অবজেক্টের সমর্থন করার জন্য ভাগ করে নিন যা তাদের অভ্যন্তরীণ রাজ্যের অংশ সাধারণ যেখানে রাজ্যের অন্যান্য অংশে পৃথক হতে পারে support

মেমেন্টো - এনক্যাপসুলেশন লঙ্ঘন না করে কোনও বস্তুর অভ্যন্তরীণ পরিস্থিতি ক্যাপচার করুন এবং প্রয়োজনের সময় বস্তুকে প্রাথমিক অবস্থায় পুনরুদ্ধারের জন্য একটি উপায় সরবরাহ করুন।

প্রক্সি - এটিতে রেফারেন্সগুলি নিয়ন্ত্রণ করার জন্য একটি "স্থানধারক" সরবরাহ করুন।


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

5

আমি আপনাকে ব্লুজে এবং অ্যাক্টিভ রাইটার ব্যবহার করার জন্য এবং বস্তুগুলির সম্পর্কে ভাল বোঝার বিকাশ করার পরামর্শ দেব। প্রস্তাবিত বইটিও একটি দুর্দান্ত উত্স।

উইকিপিডিয়া থেকে :

বিকল্প পাঠ

ব্লুজে জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজের জন্য একটি সমন্বিত বিকাশ পরিবেশ, যা মূলত শিক্ষামূলক উদ্দেশ্যে তৈরি করা হয়েছে, তবে এটি ছোট-স্কেল সফ্টওয়্যার বিকাশের জন্যও উপযুক্ত।

অতিরিক্তভাবে এটি ইউএমএল ব্যবহার করে এবং মডেলিং অবজেক্টগুলি সম্পর্কে বেশ কয়েকটি জিনিস বোঝার জন্য এটি আমার পক্ষে ভাল উত্স ছিল।

Alt পাঠ্য http://www.ryanknu.com/ryan/bluej.png

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

বিকল্প পাঠ
(উত্স: altinoren.com )


1
আমি নীল জে ব্যবহার করেছি ... এটি অবশ্যই কার্যকর কিন্তু এটি কীভাবে আমাকে ক্লাস এবং তাদের সম্পর্কগুলি ডিজাইন করতে সহায়তা করে?
ভিক্টর

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

4

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

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

এবং শেষ - এটি পড়ার চেষ্টা করুন: ক্রিয়েটিভ থিংকের অ্যালগরিদম


4

সবেমাত্র http://www.fysh.org/~katie/computing/methodologies.txt উদ্ধৃত করা হচ্ছে

আর আর পি এর মূল অংশটি এমন একটি ছোট্ট অঞ্চল যেখানে আপনাকে ওও ডিজাইন প্রতিভা ব্যবহার করতে হবে .... আপনার যদি তা না থাকে তবে এটি 100 মিটার চালানোর জন্য কোনও পদ্ধতি থাকার মতো।

"পদক্ষেপ 1: সত্যিই দ্রুত দৌড়ানোর বিষয়ে লিখুন Step পদক্ষেপ 2: যান এবং রেসট্র্যাকের একটি পরিকল্পনা আঁকুন Step পদক্ষেপ: যান এবং সত্যিই টাইট লাইক্রা শর্টস কিনুন Step পদক্ষেপ 4: সত্যই চালান, সত্যিই দ্রুত। পদক্ষেপ 5: প্রথম ক্রস লাইন "

এটি 4 ধাপটি এটি শক্ত। তবে আপনি যদি 1,2,3 এবং 5 এর উপরে প্রচুর জোর দেন তবে এটি সম্ভবত কারও নজরে আসবে না এবং আপনি সম্ভবত পদ্ধতিটি বিক্রি করে প্রচুর অর্থোপার্জন করতে পারেন এমন অ্যাথলিটরা যারা মনে করেন যে 100 মিটার হওয়ার কিছু "গোপনীয়তা" রয়েছে? রানার ওভার


4

আপনি প্রশ্ন জিজ্ঞাসা করেছেন যে প্রচুর লেখক একটি বই লেখার জন্য ব্যবহার করেন। পদ্ধতিগুলির সংখ্যা রয়েছে এবং আপনার কাছে এমন একটি চয়ন করা উচিত যা আপনার কাছে "সুন্দরতম" বলে মনে হয়।
আমি এরিক ইভান্স দ্বারা "ডোমেন চালিত ডিজাইন" বইয়ের প্রস্তাব দিতে পারি । এছাড়াও, সাইট dddcommune.org দেখুন


3

আমি মনে করি এখানে জিজ্ঞাসা করা ছেলেটির বাস্তব বিশ্বের অভিজ্ঞতার উপর নির্ভর করে উত্তরটি খুব আলাদা হওয়া উচিত ।

আপনার যদি মাত্র এক বা দুই বছরের কাজের অভিজ্ঞতা থাকে তবে আপনার অবশ্যই অবশ্যই সেই বিন্দুতে যেতে হবে: আপনি কীভাবে আপনার তথ্যটি জানেন এবং ঠিক কীভাবে আপনি চেষ্টা করছেন তা বুঝতে পারবেন?

হ্যাঁ, আপনি যদি আসল বিশ্বে 5+ বছর ধরে কাজ করে থাকেন তবে আপনি অনেকগুলি সফ্টওয়্যার বিকাশ প্রক্রিয়া মডেল বা কৌশলগুলির মধ্যে যে কোনওটির মধ্যে বেছে নিতে পারেন।

তবে আপনি কেবল বই পড়ে অভিজ্ঞতা পাবেন না। আপনার নেতৃত্বের অধীনে একটি ভাল গ্রুপে কাজ করে শেখা উচিত।

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

আপনি আপনার কোডবেস সম্পর্কে অনেক কিছু শিখবেন। সরঞ্জামগুলি সরঞ্জাম, তারা আপনাকে কিছুই শেখায় না।


3

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

আপনার যদি সেই দক্ষতা না থাকে তবে কারও কাছে সেই দক্ষতা রয়েছে এবং সেই ধারণাগুলি প্রযুক্তিগত বিশদগুলিতে রূপান্তর করুন।

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


2
  1. অধ্যয়ন এবং মাস্টার ডিজাইন প্যাটার্নস।
  2. এরপরে, ডোমেন চালিত নকশা সম্পর্কে জানুন
  3. এর পরে, প্রয়োজনীয় জমায়েত শিখুন

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

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

  2. বিশেষত বিকল্প কোর্সের জন্য ব্যবহারের ক্ষেত্রে লিখুন। বিকল্প কোর্স আমাদের বিকাশের 50% এরও বেশি সময় দখল করে। সাধারণত যখন আপনার প্রধানমন্ত্রী আপনাকে একটি কার্যভার অর্পণ করেন, উদাহরণস্বরূপ, লগইন সিস্টেম তৈরি করুন, তখন তিনি ভাববেন যে এটি সরাসরি এগিয়ে রয়েছে, এটি শেষ করতে আপনি 1 দিন সময় নিতে পারেন। তবে তিনি কখনই সেই অ্যাকাউন্টটিকে বিবেচনা করবেন না, ১. ভুল পাসওয়ার্ডে ব্যবহারকারী কী কী, ২. যদি ব্যবহারকারী পাসওয়ার্ডটি তিনবারের জন্য ভুল পাসওয়ার্ডে থাকে, ৩. ব্যবহারকারী যদি ব্যবহারকারীর নাম এবং ইত্যাদি টাইপ না করেন তবে কী হবে what আপনাকে সেগুলি তালিকাভুক্ত করা দরকার এবং এটি আপনার প্রধানমন্ত্রীকে দেখাতে হবে, সময়সীমাটি পুনরায় নির্ধারণ করতে তাকে বলুন।


2

আমি ভয় পাচ্ছি যে এটি কোনও উত্তর নয় যা লোকেরা শুনতে পছন্দ করে । যাইহোক, আমাকে আমার মতামত জানাতে দিন।

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

আমি মনে করি যে, বেশিরভাগ সময় ওওপি এবং ওওডি এমন সফ্টওয়্যার তৈরি করে যা ওভার ডিজাইনের শিকার হয়।

সংক্ষেপে বলতে গেলে, সফ্টওয়্যারটি লেখার আমার পছন্দের উপায়টি হ'ল:

  1. একটি গতিশীল ভাষা ব্যবহার করুন।
  2. সেই ভাষায়ই নকশা (প্রোটোটাইপ) লিখুন।
  3. প্রয়োজনে সি / সি ++ ব্যবহার করে নির্দিষ্ট অঞ্চলগুলি অনুকূল করে নিন।
  4. নিজেই প্রয়োগকারী ভাষার দোভাষী দ্বারা এক্সটেনসিবিলিটি সরবরাহ করুন।

শেষ বৈশিষ্ট্যটি সফ্টওয়্যারটিকে নির্দিষ্ট ব্যবহারকারীদের (নিজেকে সহ!) প্রয়োজনীয়তার সাথে সহজেই খাপ খাইয়ে নিতে সক্ষম করে।


এটি কীভাবে ডিজাইন করবেন সে সম্পর্কে কঠোরভাবে পরামর্শ দেওয়া হয়েছে
NomeN

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

2

আমি টেস্ট-চালিত ডিজাইন (টিডিডি) ব্যবহার করি। প্রথমে পরীক্ষা লেখার ফলে আপনাকে এমন একটি নকশায় নিয়ে যেতে সহায়তা করে যা পরিষ্কার এবং সঠিক। Http://en.wikedia.org/wiki/Test-driven_de ترقيment দেখুন ।


2
টিডিডি প্রাথমিকভাবে আপনার সিস্টেমটিকে একটি কালো বাক্স হিসাবে এর নমুনা ইনপুট এবং আউটপুট সহ কল্পনা করতে সহায়তা করে। তবে প্রতি সিটি এটি আপনাকে সিস্টেমের নকশা নিয়ে আসতে সহায়তা করে না। আমি বলতে চাইছি ইউনিট পরীক্ষার জন্য আপনাকে প্রথমে পরীক্ষার জন্য ক্লাস ইন্টারফেসটি নিয়ে আসতে হবে
ভিসেন্টে বোলেয়া

2

নকশা নিদর্শন শিখুন । ওওপি সম্পর্কিত গত দুই বছর এটি আমার ব্যক্তিগত বিপ্লব revolution একটি বই পান। আমি আপনাকে এটির প্রস্তাব দিচ্ছি:

মাথা প্রথম ডিজাইন প্যাটার্নস

এটি জাভাতে রয়েছে তবে এটি যে কোনও ভাষার ক্ষেত্রেই বর্ধমান হতে পারে।


1

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


1
আমি যখন কোনও ইস্যুতে আটকে যাই তার জন্য আমি ফ্লোচার্ট পছন্দ করি। এটি মাঝে মাঝে আমাকে সমস্যা সম্পর্কে অন্যরকমভাবে ভাবতে সহায়তা করে।
ব্যবহারকারী 133018

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

হ্যাঁ, আমি সাধারণত বেশিরভাগ সময়ই ব্যবহার করি সাধারণত ফ্লো চার্টগুলি মূলত যখন আমি কোনও নির্দিষ্ট বিষয় বের করার চেষ্টা করি for
ব্যবহারকারী 133018

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


1

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

প্রকৃতপক্ষে. পাশের ফার্মাসি বা ডাক্তারের ঘর কীভাবে পরিচালিত হবে তা পর্যবেক্ষণ করুন।

আপনার ডোমেন সমস্যাটি আপনার কাছে বোধগম্য কিছুতে নামিয়ে আনুন; কিছু যা আপনি সম্পর্কিত করতে পারেন।

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

ডোমেনের সাথে সম্পর্কিত এবং এটি একটি উচ্চ স্তরে বোঝা যে কোনও ডিজাইনের মূল অংশ।


1

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

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