একটি জাভা প্রোগ্রামের উচ্চ-স্তরের কাঠামো কীভাবে নথিভুক্ত করবেন?


20

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

  • প্রতিটি শ্রেণি এবং পদ্ধতির জন্য জাভাদোকস
  • কোডটি কীভাবে ব্যবহার করবেন
  • কোডটির উচ্চ-স্তরের কাঠামো বর্ণনা করছেন

আমার উচ্চ-স্তরের প্রশ্নটি: আপনি কী শব্দ এবং চিত্রগুলির একটি ভাল উদাহরণ প্রদান করতে পারেন যা কোনও প্রোগ্রামের উচ্চ-স্তরের কাঠামো বর্ণনা করতে ব্যবহার করা যেতে পারে? এর মধ্যে উপ-প্রশ্ন হিসাবে অন্তর্ভুক্ত রয়েছে:

  1. কোন প্যাকেজগুলিতে কী ক্লাস রয়েছে তা আমরা কীভাবে দেখাব?
  2. কীভাবে প্যাকেজগুলি অন্যান্য প্যাকেজগুলির উপর নির্ভর করে তা আমরা কীভাবে দেখাব?
  3. প্রোগ্রামের অবজেক্ট / ক্লাসগুলি কীভাবে একসাথে কাজ করে তা আমরা কীভাবে দেখাব?
  4. আমরা আমার কোডের ডিজাইনে ডোমেন-চালিত ডিজাইন নীতিগুলি ব্যবহার করার চেষ্টা করেছি। আমরা কীভাবে ডোমেনের অবজেক্ট এবং এই উত্সগুলিকে এনকোডিং করে নির্দিষ্ট উত্স কোড ফাইলগুলির মধ্যে চিঠিপত্র দেখাব? (নীচে প্রকল্পের আমার "সর্বব্যাপী ভাষা" বর্ণনা দেখুন))

আমি এ পর্যন্ত কি করেছি

সর্বব্যাপী ভাষা

আমরা ubiquitous-language.mdনীচে একটি ফাইলে ফাইলের কোডের একটি "সর্বব্যাপী ভাষা" বর্ণনা রেখেছি ।

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

প্রতিটি পিরিয়ডে, নিম্নলিখিত ইভেন্টগুলি ঘটে:

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

উত্স কোড কাঠামো

আমরা কোনও ফাইলের কোডের একটি অসম্পূর্ণ "উচ্চ-স্তরের" বর্ণনা রেখেছি structure.md, নীচের বিষয়বস্তুতে।

প্যাকেজ স্তর স্তর

সর্বোচ্চ স্তরে, উত্স কোডটি তিনটি প্যাকেজগুলিতে সংগঠিত হয়

  • com.gly.sfsmainপদ্ধতি সহ প্রধান শ্রেণি এই প্যাকেজটিতে থাকে।
  • com.gly.sfs.model ডোমেন মডেল ক্লাসগুলি এই প্যাকেজটিতে থাকে।
  • com.gly.sfs.util সহায়ক প্যাকেজগুলি এই প্যাকেজে থাকে।


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

একাডেমিক কোড প্রকাশের জন্য বড় প্রপস
ফেলিক্স

@ রবার্টহার্ভে প্রশ্নের আমার সম্পাদনাগুলি দেখুন। কোন ক্লাসগুলিতে কোন প্যাকেজগুলিতে আরও সোজা তা দেখানো হচ্ছে, ক্লাসগুলি কীভাবে একসাথে কাজ করে তা আরও জটিল showing
আমি ২:

1
আপনি প্যাকেজ-স্তরের জাভাদোকও যুক্ত করতে চাইতে পারেন।
হাইলিমে

উত্তর:


4

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

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

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

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

http://omarfrancisco.com/wp-content/uploads/2011/07/sequencediagram.png

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

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

http://www.f5systems.in/apnashoppe/education//img/chapters/uml_class_diagram.jpg

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

আমি দীর্ঘ সময় ধরে ইউএমএল ডায়াগ্রামের বিষয়ে কথা বলতে পারি, তবে এটি মূল বিষয়গুলি। আশা করি এটি সাহায্য করবে।

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


18

আপনার প্রোগ্রামের উচ্চ-স্তরের কাঠামো কীভাবে কাজ করে এবং ক্লাসগুলি একসাথে কীভাবে ভালভাবে কাজ করে সে সম্পর্কিত বিষয়গুলি বর্ণনা করতে আপনার যদি সমস্যা হয় তবে নিম্নলিখিত সর্বোচ্চটি বিবেচনা করুন:

A picture is worth a thousand words.

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

শেষ-ব্যবহারকারীর জন্য আপনি যেভাবে ছবি আঁকেন তা হ'ল স্ক্রিনশট সরবরাহ করা। তাদের মধ্যে অনেক. স্ক্রিনশটের পরে স্ক্রিনশট যা চিত্রিত করে, আপনি যদি এই কাজটি করতে চান তবে আপনি প্রথমে এটিই করেন, আপনি পরবর্তী কাজটি করুন ইত্যাদি etc.


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

6
ইউএমএল উল্লেখ না করার জন্য +1 ।
ডক ব্রাউন

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

@ ডকব্রাউন এই ক্ষেত্রে কেন ইউএমএল একটি খারাপ সমাধান হবে?
ওন্নো

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

3

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


1

আমি https://www.websequencediagrams.com/ একটি অ্যাপ্লিকেশন মধ্যে উপাদানগুলির মধ্যে পারস্পরিক মিথস্ক্রিয়া বর্ণনা, বা বিতরণ অ্যাপ্লিকেশন মধ্যে পরিষেবাদির মধ্যে একটি অত্যন্ত দরকারী সরঞ্জাম খুঁজে পাই । এটি কেবল ইউএমএল ক্রম ডায়াগ্রামগুলি তৈরি এবং রক্ষণাবেক্ষণের প্রক্রিয়াটিকে আরও সহজ করে তোলে।

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

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

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