ভূমিকা
আমি মনে করি সবাই এই কথাটি শুনেছেন "দুইবার পরিমাপ করুন, একবার কাটুন"। এটা প্রোগ্রামিং এ সত্য উপদেশ. এটি বাস্তবায়নের জন্য যেকোন সময় ব্যয় করার আগে এটি বাস্তবায়ন সম্পর্কে চিন্তা করা সর্বদা ভাল। বাস্তবায়নের সময়, আপনাকে প্রায়শই ক্লাস তৈরি করতে হবে এবং তারা কীভাবে ইন্টারঅ্যাক্ট করবে তা ভাবতে হবে। এটির একটি চাক্ষুষ উপস্থাপনা প্রায়ই আপনাকে সবচেয়ে সঠিক সমাধান নিয়ে আসতে সাহায্য করতে পারে। এখানেই UML ক্লাস ডায়াগ্রাম আমাদের সাহায্যে আসে।UML কি?
আপনি যদি সার্চ ইঞ্জিনগুলিতে প্রাসঙ্গিক চিত্রগুলি দেখেন, আপনি দেখতে পাবেন যে UML এর ডায়াগ্রাম, তীর এবং বর্গক্ষেত্রের সাথে কিছু করার আছে। আপনাকে জানতে হবে যে UML মানে ইউনিফাইড মডেলিং ল্যাঙ্গুয়েজ। ইউনিফাইড এখানে গুরুত্বপূর্ণ শব্দ। এর মানে হল যে আমাদের ছবিগুলি শুধুমাত্র আমরাই নয়, UML কে চেনে এমন অন্য কেউও বুঝতে পারবে। এটি ডায়াগ্রাম আঁকার জন্য ভাষা ফ্রাঙ্কা।উইকিপিডিয়া অনুযায়ী,
"ইউএমএল হল সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের ক্ষেত্রে একটি সাধারণ-উদ্দেশ্যমূলক, উন্নয়নমূলক, মডেলিং ভাষা যা একটি সিস্টেমের নকশাকে কল্পনা করার জন্য একটি আদর্শ উপায় প্রদান করার উদ্দেশ্যে তৈরি করা হয়েছে।"সবচেয়ে আকর্ষণীয় জিনিস, যা সবাই অনুমান করবে না, তা হল যে UML এর স্পেসিফিকেশন আছে। এবং এমনকি একটি UML 2 স্পেসিফিকেশন আছে। স্পেসিফিকেশন সম্পর্কে আরও তথ্য অবজেক্ট ম্যানেজমেন্ট গ্রুপ ওয়েবসাইটে উপলব্ধ। আসলে, এই গ্রুপটি ইউএমএল স্পেসিফিকেশন তৈরি করে। এটাও আকর্ষণীয় যে UML শুধুমাত্র ক্লাসের গঠন বর্ণনা করার মধ্যেই সীমাবদ্ধ নয়। অনেক ধরনের UML ডায়াগ্রাম আছে। উইকিপিডিয়ায় বিভিন্ন ধরনের UML ডায়াগ্রামের সংক্ষিপ্ত বিবরণ রয়েছে: UML ডায়াগ্রাম । ইউএমএল ক্লাস ডায়াগ্রামে ফিরে, এটি "হেড ফার্স্ট ডিজাইন প্যাটার্নস" বইটি উল্লেখ করার মতো , ডিজাইন প্যাটার্নগুলি চিত্রিত করতে ইউএমএল ডায়াগ্রাম ব্যবহার করে। নীচের লাইন হল যে UML সত্যিই ব্যবহৃত হয়। এবং দেখা যাচ্ছে যে এটি জানা এবং কীভাবে ব্যবহার করতে হয় তা বোঝা বেশ কার্যকর।
আবেদন
আসুন আমরা একটি IDE তে UML এর সাথে কাজ করতে পারি তা বের করি। আমরা আমাদের IDE হিসাবে IntelliJ IDEA ব্যবহার করব। আপনি যদি IntelliJ IDEA Ultimate ব্যবহার করেন, তাহলে আমাদের কাছে "UML সাপোর্ট" প্লাগইনটি "বক্সের বাইরে" ইনস্টল থাকবে। এটি আপনাকে স্বয়ংক্রিয়ভাবে সুন্দর ক্লাস ডায়াগ্রাম তৈরি করতে দেয়। উদাহরণস্বরূপ, ArrayList ক্লাসে যেতে Ctrl+N বা "নেভিগেট" -> "ক্লাস" মেনু আইটেম ব্যবহার করুন। এখন ক্লাস নামের প্রসঙ্গ মেনুতে, "ডায়াগ্রাম" -> "ডায়াগ্রাম পপআপ দেখান" নির্বাচন করুন। ফলস্বরূপ, আমরা একটি সুন্দর চিত্র পাই।

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
IDEA-তে ফলাফল দেখতে, "View" -> "Tool Windows" -> "PlantUML" নির্বাচন করুন। আমরা শুধু দুটি বর্গ পেতে যা ক্লাসের প্রতিনিধিত্ব করে। আমরা জানি যে এই উভয় শ্রেণীই তালিকা ইন্টারফেস বাস্তবায়ন করে। এই শ্রেণী সম্পর্ককে বলা হয় উপলব্ধি। এই সম্পর্কটি একটি বিন্দুযুক্ত রেখা সহ একটি তীর ব্যবহার করে উপস্থাপন করা হয়। আসুন এটি আঁকুন:
interface List
List <|.. ArrayList
List <|.. LinkedList
তালিকাটি সংগ্রহের ক্লাসের বাচ্চাদের মধ্যে একটি । অর্থাৎ, এটি সংগ্রহের উত্তরাধিকারী হয় । এই সম্পর্ককে সাধারণীকরণ বলা হয়। এটি একটি সাধারণ অবিচ্ছিন্ন রেখা সহ একটি তীরের মতো দেখায়। আসুন এটি আঁকুন:
interface Collection
Collection <|-- List
পরবর্তী ধরণের সম্পর্কের জন্য, অ্যারেলিস্ট ক্লাসের বিবরণে উপাদানগুলির একটি প্যাকেজ ব্যক্তিগত অ্যারে সম্পর্কে একটি এন্ট্রি যুক্ত করুন:
~Object[] elementData
এখন আমরা দেখাতে চাই যে ArrayList-এ কিছু বস্তু রয়েছে। এই ক্ষেত্রে, একটি সমষ্টি সম্পর্ক হবে। অ্যারেলিস্টএটি একটি সমষ্টিগত, যেহেতু এতে অন্যান্য বস্তু রয়েছে। আমরা একত্রীকরণ বলি কারণ তালিকার বস্তুগুলি তালিকা ছাড়াই থাকতে পারে: তারা তালিকার অবিচ্ছেদ্য অংশ নয়। তাদের জীবনকাল তালিকার জীবনকালের সাথে বাঁধা নয়। "সমষ্টি" শব্দটি ল্যাটিন থেকে আমাদের কাছে আসে এবং "একত্রিত" হিসাবে অনুবাদ করে, অর্থাৎ কিছু কিছু দিয়ে তৈরি। উদাহরণস্বরূপ, জীবনে, আমাদের একটি পাম্প সমাবেশ (সমষ্টি), যা একটি পাম্প এবং একটি মোটর নিয়ে গঠিত। সমাবেশ নিজেই disassembled করা যেতে পারে, এবং আমরা একা তার উপাদান কিছু ছেড়ে যেতে পারেন. উদাহরণস্বরূপ, বিক্রি করা বা অন্য সমাবেশে রাখা। এটি একটি তালিকা একই ভাবে. এটি সমষ্টিতে একটি খালি রম্বস এবং একটি অবিচ্ছিন্ন রেখা দিয়ে প্রকাশ করা হয়। আমরা এটিকে নিম্নরূপ উপস্থাপন করব:
class Object{
}
ArrayList o- Object
এখন আমরা দেখাতে চাই যে ArrayList এর বিপরীতে , LinkedList ক্লাসে Node s — কনটেইনার রয়েছে যা সংরক্ষিত ডেটার উল্লেখ করে। এই ক্ষেত্রে, নোডগুলি লিঙ্কডলিস্টের অংশ এবং একটি স্বাধীন অস্তিত্ব নেই। একটি নোড সামগ্রী নিজেই নয়। এটি শুধুমাত্র বিষয়বস্তুর একটি রেফারেন্স ধারণ করে। উদাহরণস্বরূপ, যখন আমরা একটি লিঙ্কডলিস্টে একটি স্ট্রিং যোগ করি, তখন আমরা একটি নতুন নোড যুক্ত করছি যাতে স্ট্রিংয়ের একটি রেফারেন্স রয়েছে, সেইসাথে পূর্ববর্তী এবং পরবর্তী নোডের একটি লিঙ্ক রয়েছে. এই সম্পর্ককে রচনা বলা হয়। এটি কম্পোজিটের উপর একটি ভরা রম্বস দিয়ে একটি ক্রমাগত রেখা অঙ্কন করে চিত্রিত করা হয়েছে (গঠক অংশ দিয়ে তৈরি কিছু)। এখন আমরা সম্পর্কটিকে পাঠ্য হিসাবে উপস্থাপন করব:
class Node{
}
LinkedList *-- Node
এবং এখন আপনাকে শিখতে হবে কীভাবে আরেকটি গুরুত্বপূর্ণ ধরণের সম্পর্কের চিত্রিত করা যায়: নির্ভরতা। এটি ব্যবহার করা হয় যখন একটি শ্রেণী অন্যটি ব্যবহার করে, কিন্তু শ্রেণীটিতে ব্যবহৃত শ্রেণী থাকে না বা উত্তরাধিকারী হয় না। উদাহরণস্বরূপ, LinkedList এবং ArrayList জানেন কিভাবে একটি ListIterator তৈরি করতে হয় । আমরা এটিকে একটি বিন্দুযুক্ত রেখা সহ তীর হিসাবে উপস্থাপন করি:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
এই সব করার পরে, আমরা পাই: 
অটোমেশন
প্ল্যান্টইউএমএল ডায়াগ্রামগুলি স্বয়ংক্রিয়ভাবে তৈরি করার বিভিন্ন উপায় রয়েছে। উদাহরণস্বরূপ, IDEA এর SketchIT প্লাগইন আছে, কিন্তু এটি সম্পূর্ণরূপে সঠিকভাবে ডায়াগ্রাম আঁকে না। ধরা যাক ইন্টারফেসের বাস্তবায়ন ভুলভাবে আঁকা হয়েছে (এটি উত্তরাধিকার হিসাবে প্রদর্শিত হয়)। আপনার প্রকল্পের বিল্ড প্রক্রিয়ার সাথে এটিকে কীভাবে একীভূত করা যায় তার উদাহরণ ইন্টারনেটে রয়েছে। উদাহরণস্বরূপ, আপনি Maven এর সাথে uml-java-docklet কিভাবে ব্যবহার করবেন তা খুঁজে পেতে পারেন। প্রদর্শনের জন্য, আমরা দ্রুত একটি Maven প্রকল্প তৈরি করতে Maven Archetype ব্যবহার করব । চালান
mvn archetype:generate
একটি নম্বর চয়ন করুন বা ফিল্টার প্রয়োগ করুন এর প্রতিক্রিয়ায়, ডিফল্টটি ছেড়ে দিন — শুধু এন্টার টিপুন৷ এটি সর্বদা "মাভেন-আর্কিটাইপ-কুইকস্টার্ট" হবে। সর্বশেষ সংস্করণ নির্বাচন করুন. এর পরে, আমরা কিছু প্রশ্নের উত্তর দেব এবং প্রকল্প তৈরি করা শেষ করব: 
mvn clean install
এবং
mvn javadoc: javadoc
যদি আমরা এখন জেনারেট করা ডকুমেন্টেশন খুলি (এক্সপ্লোরার টার্গেট\site\apidocs\index.html), আমরা UML ডায়াগ্রাম দেখতে পাব। যাইহোক, বাস্তবায়ন সম্পর্ক এখন সঠিকভাবে প্রদর্শিত হয় :)
GO TO FULL VERSION