ট্র্যাক
/
Java
Java
/
অনুশীলনী
/
ব্যাংক অ্যাকাউন্ট
ব্যাংক অ্যাকাউন্ট

ব্যাংক অ্যাকাউন্ট

মধ্যম

ভূমিকা

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

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

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

আহা, ঠিক যেমনটা আপনি সন্দেহ করেছিলেন, দোষটা আপনার বন্ধুরই! সে তার টেস্ট ক্রেডেনশিয়াল আরেক বন্ধুর সাথে শেয়ার করেছিল, আর দুজনে মিলে ষড়যন্ত্র করে একই অ্যাকাউন্টে প্যারালালে ডিপোজিট ও উইথড্র করতে শুরু করেছিল। এমন কাজ কে-ই বা করে?

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

নির্দেশনা

আপনার কাজ হলো এমন ব্যাংক অ্যাকাউন্ট তৈরি করা যেগুলোতে অ্যাকাউন্ট খোলা/বন্ধ করা, টাকা জমা এবং টাকা উত্তোলনের সুবিধা থাকবে।

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

একটি অ্যাকাউন্ট বন্ধ করা সম্ভব হওয়া উচিত; বন্ধ অ্যাকাউন্টে করা যেকোনো কাজ ব্যর্থ হতে হবে।

বাস্তবায়ন

এই অনুশীলনীতে কনকারেন্সি আলোচনা করা হয়েছে। শেষ টেস্টটি পাস করতে synchronized কিওয়ার্ড বা লক আপনার কাজে লাগতে পারে।

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

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Java Exercism

ব্যাংক অ্যাকাউন্ট শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।