আপনি একটি ব্যস্ত রেলওয়ে নেটওয়ার্কের জন্য ট্রেন শিডিউলিং সিস্টেম তৈরির একটি প্রকল্পে কাজ করছেন।
শিডিউলিং সিস্টেমের ট্রেন রুটগুলোর একটি প্রোটোটাইপ তৈরি করতে আপনাকে বলা হয়েছে। প্রতিটি রুট হলো ট্রেন স্টেশনগুলোর একটি ক্রম, যেখানে কোনো একটি নির্দিষ্ট ট্রেন থামে।
আপনার দল সিদ্ধান্ত নিয়েছে যে সময়সূচির প্রতিটি ট্রেন রুট উপস্থাপন করতে একটি ডাবলি লিংকড লিস্ট ব্যবহার করা হবে। ট্রেনের রুটের প্রতিটি স্টেশন লিংকড লিস্টের একটি নোড দিয়ে উপস্থাপন করা হবে।
স্টেশনগুলোতে আগমন ও প্রস্থানের সময় নিয়ে আপনার চিন্তা করতে হবে না। প্রতিটি স্টেশন শুধু একটি সংখ্যা দিয়ে উপস্থাপন করা হবে।
রুটগুলো সম্প্রসারিত করা যায়, রুটের শুরুতে বা শেষে স্টেশন যোগ করে। রুটের শুরু বা শেষ থেকে স্টেশন সরিয়ে এগুলো ছোটও করা যায়।
কখনো কখনো কোনো স্টেশন বন্ধ হয়ে যায়, আর সেক্ষেত্রে স্টেশনটি রুট থেকে সরিয়ে ফেলতে হয়, এমনকি সেটি রুটের শুরুতে বা শেষে না থাকলেও।
একটি রুটের আকার মাপা হয় ট্রেনটি কত দূর চলে তা দিয়ে নয়, বরং এটি কতগুলো স্টেশনে থামে তা দিয়ে।
লিংকড লিস্ট হলো কম্পিউটার সায়েন্সের একটি মৌলিক ডেটা স্ট্রাকচার, যা প্রায়ই অন্য ডেটা স্ট্রাকচার তৈরি করতে ব্যবহৃত হয়। নাম থেকেই বোঝা যায়, এটি এমন একটি লিস্ট যার নোডগুলো পরস্পর সংযুক্ত। এটি "নোড"-এর একটি লিস্ট, যেখানে প্রতিটি নোড তার প্রতিবেশী বা প্রতিবেশীদের সাথে সংযুক্ত থাকে। একটি সিঙ্গলি লিংকড লিস্ট-এ প্রতিটি নোড কেবল তার পরে আসা নোডের সাথে সংযুক্ত থাকে। একটি ডাবলি লিংকড লিস্ট-এ প্রতিটি নোড তার আগে আসা নোড এবং পরে আসা নোড, উভয়ের সাথেই সংযুক্ত থাকে।
লিংকড লিস্ট সম্পর্কে আরও গভীরে যেতে চাইলে, সুন্দর কিছু ছবি দিয়ে এটি ব্যাখ্যা করা এই নিবন্ধটি দেখুন।
এই অনুশীলনীতে জেনেরিকস পরিচয় করিয়ে দেওয়া হয়েছে।
টেস্টগুলো পাস করাতে হলে আপনাকে আপনার ক্লাস এমনভাবে তৈরি করতে হবে যাতে এটি যেকোনো ধরনের ইনপুট গ্রহণ করে, যেমন Integer বা String।
জেনেরিকস কাজে আসে কারণ এগুলো আপনাকে আরও সাধারণ ও পুনরায় ব্যবহারযোগ্য কোড লিখতে দেয়।
Java-এর List এবং Map ইমপ্লিমেন্টেশন দুটোই জেনেরিকস ব্যবহার করে এমন ক্লাসের উদাহরণ।
এগুলো ব্যবহার করে আপনি Integers ধারণ করা একটি List, অথবা Strings বা অন্য যেকোনো ধরন ধারণ করা একটি অ্যারে তৈরি করতে পারেন।
জেনেরিকসে ব্যবহৃত ধরনগুলোর উপর কয়েকটি সীমাবদ্ধতা আছে।
এর একটি হলো, একবার Integers ধারণ করা একটি List তৈরি করলে, আপনি এতে Strings রাখতে পারবেন না।
আপনি যখন ক্লাসটি তৈরি করবেন, তখন কোন ধরনটি এতে রাখতে চান তা নির্দিষ্ট করতে হবে, এবং সেই ইনস্ট্যান্সটি এরপর কেবল সেই ধরনের সাথেই ব্যবহার করা যাবে।
উদাহরণস্বরূপ আপনি Integers-এর একটি অ্যারে তৈরি করতে পারেন:
List<Integer> someList = new LinkedList<>();
এখন someList-এ কেবল Integers থাকতে পারে। আপনি এটাও করতে পারেন:
List<String> someOtherList = new LinkedList<>()
এখন someOtherList-এ কেবল Strings থাকতে পারে।
আরেকটি সীমাবদ্ধতা হলো, জেনেরিকসের সাথে ব্যবহৃত যেকোনো ধরন প্রিমিটিভ টাইপ হতে পারে না, যেমন int বা long।
তবে প্রতিটি প্রিমিটিভ টাইপের একটি সংশ্লিষ্ট রেফারেন্স টাইপ থাকে, তাই int-এর বদলে আপনি Integer এবং long-এর বদলে Long ব্যবহার করতে পারেন।
শুরু করার জন্য জেনেরিকসের একটি উদাহরণ ব্যবহারক্ষেত্র দেখা সহায়ক হতে পারে।
Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।