সরাসরি প্রধান সামগ্রীতে চলে যান

জাভাতে ক্যারিয়ার ক্লাস এবং ডিকনস্ট্রাকশন এর বিবর্তন

Introduction

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


ক্যারিয়ার ক্লাসের প্রথম প্রস্তাব (First Proposal)

রেফারেন্স: [14:14]

শুরুতে আইডিয়া ছিল যে, একটা ক্লাসের হেডারেই (Header) আমরা বলে দেব যে এই ক্লাসের ভেতর কী কী কম্পোনেন্ট আছে। এর মাধ্যমে জাভা অটোমেটিকালি equals, hashCode, এবং toString মেথডগুলো তৈরি করে দেবে।

বিস্তারিত: রেকর্ড ক্লাসে যেমন ব্র্যাকেটের ভেতর সব ভেরিয়েবল লিখে দেওয়া হয়, ক্যারিয়ার ক্লাসেও অনেকটা সেরকম করার চেষ্টা করা হয়েছিল। এতে সুবিধা হতো যে আপনাকে বারবার একঘেয়ে কোড (Boilerplate code) লিখতে হতো না। কিন্তু ব্রায়ান গেটজ (Java Architect) খেয়াল করলেন যে, এতে সিস্টেমটা অনেক জটিল হয়ে যাচ্ছে। কারণ এটি ক্লাসের ওপর অনেক বেশি সীমাবদ্ধতা তৈরি করছিল, যা অনেকটা রেকর্ডের মতোই হয়ে যাচ্ছিল।

  • সহজ ব্যাখ্যা (Boilerplate code): প্রೋಗামিংয়ে কিছু কোড আছে যা বারবার একই রকম লিখতে হয় (যেমন গেটার/সেটার)। এগুলোকে 'বয়লারপ্লেট' বলা হয়।

দ্বিতীয় ও বর্তমান প্রস্তাব (Second Proposal)

রেফারেন্স: [15:57]

দ্বিতীয়বার যখন তারা এটা নিয়ে ভাবলেন, তখন তারা ফোকাস করলেন 'API' এর ওপর। অর্থাৎ, একটা ক্লাসকে কীভাবে ভেঙে ফেলা যায় (Deconstruction), তার ওপর বেশি গুরুত্ব দেওয়া হলো।

বিস্তারিত: এবারের প্রস্তাবে বলা হলো, ক্লাসের হেডারে কম্পোনেন্ট লিস্ট থাকার মানে হলো—"আমি এই জিনিসগুলো দিয়ে তৈরি এবং আমাকে এইভাবেই ভাঙা যাবে।" এটা অনেকটা কোনো খেলনা বা যন্ত্রের পার্টস আলাদা করার মতো। যদি আপনার ক্লাসে একটি কনস্ট্রাক্টর (Constructor) থাকে যার প্যারামিটারগুলো এই লিস্টের সাথে মিলে যায়, তবে জাভা সেটাকে অটোমেটিকালি গ্রহণ করে নেবে। এর ফলে কোড আরও নমনীয় (Flexible) হয়।

  • সহজ ব্যাখ্যা (Deconstruction): ধরুন আপনার কাছে একটি 'বিন্দু' (Point) ক্লাস আছে যার মান x=10 এবং y=20। ডিকনস্ট্রাকশন মানে হলো সেই ক্লাস থেকে সরাসরি 10 এবং 20 মান দুটি আলাদা করে নেওয়া।

রিকনস্ট্রাকশন এবং উইদার্স (Reconstruction & Withers)

রেফারেন্স: [18:01]

নতুন আইডিয়াগুলোর মধ্যে একটি হলো 'Reconstruction'। অর্থাৎ একটা অবজেক্টকে ভেঙে আবার নতুন করে গড়া।

বিস্তারিত: মাঝে মাঝে আমাদের প্রয়োজন হয় একটি অবজেক্টের সব মান ঠিক রেখে শুধু একটি মান পরিবর্তন করে নতুন একটি অবজেক্ট তৈরি করা। জাভাতে এটাকে সহজ করার জন্য 'Withers' বা with কীওয়ার্ড নিয়ে কাজ চলছে। যেমন: myObject with { x = 5 }। ক্যারিয়ার ক্লাস এই রিকনস্ট্রাকশন প্রসেসকে অনেক সহজ করে দেবে।


ডাটা মার্শালিং ও সিরিয়ালাইজেশন (Marshalling & Serialization)

রেফারেন্স: [19:11]

যদি আমরা কোনো ক্লাসকে সঠিকভাবে ভাঙতে এবং আবার জোড়া লাগাতে পারি, তবে সেই ডাটা ইন্টারনেটের মাধ্যমে পাঠানো (Serialization) অনেক সহজ হয়।

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


এনালাইসিস এবং আমার ভাবনা

ভিডিওর এই অংশটি থেকে বোঝা যায় যে, জাভা টিম এখন কোড কমানোর চেয়ে সেমান্টিক কন্ট্রাক্ট (Semantic Contract) বা কোডের অর্থপূর্ণ ব্যবহারের দিকে বেশি নজর দিচ্ছে।

বাস্তবতা ও সম্ভাবনা: ১. সহজ কোড: ভবিষ্যতে জাভা ডেভেলপারদের আর হাজার হাজার লাইনের অপ্রয়োজনীয় কোড লিখতে হবে না। ২. ভুল কম হওয়া: অটোমেটিক মেথড তৈরির ফলে হাতে কোড লেখার সময় যে ভুলগুলো হয়, তা কমে যাবে। ৩. বিকল্প চিন্তা: লম্বক (Lombok) লাইব্রেরি বর্তমানে এই কাজগুলো করে দেয়, কিন্তু জাভা নিজে থেকে এই ফিচারগুলো আনলে থার্ড-পার্টি লাইব্রেরির ওপর নির্ভরতা কমবে।

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

সহজ ভাষায় কিছু কঠিন শব্দের ব্যাখ্যা:

  • Encapsulation (এনক্যাপসুলেশন): ডাটাকে একটি প্যাকেটের (ক্লাস) মধ্যে নিরাপদ রাখা।

  • Canonical Constructor: একটি স্ট্যান্ডার্ড নিয়ম মেনে তৈরি করা কনস্ট্রাক্টর যা ক্লাসের সব ডাটা সেট করে।

  • Semantic: কোডের বাহ্যিক রূপ নয়, বরং কোডটি আসলে কী বোঝাতে চাচ্ছে সেই মূল অর্থ।

[

Carrier Classes & Discussing Syntax - Inside Java Podcast 52

Java · 3K views

](http://www.youtube.com/watch?v=b6cXuA84c9g)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প

Introduction এই ভিডিওর নির্দিষ্ট অংশে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার নতুন ফিচারগুলো তৈরি হয় এবং এতে সাধারণ ডেভেলপারদের মতামতের গুরুত্ব কতটুকু। বিশেষ করে Structured Concurrency -এর মতো জটিল ফিচারগুলো কেন বারবার 'Preview' অবস্থায় থাকে এবং কীভাবে কমিউনিটির ফিডব্যাক সেই ফিচারগুলোকে আরও নিখুঁত করতে সাহায্য করে, তা এখানে সহজভাবে বোঝানো হয়েছে। ১. ভালো ফিডব্যাক আসলে কী? ভিডিও রেফারেন্স: [ 34:53 ] ব্রায়ান গোয়েটজ বলছেন যে, জাভা টিম যখন কোনো নতুন ফিচারের খসড়া (Draft) বা প্রস্তাব (JEP) প্রকাশ করে, তখন তারা এমন কিছু জানতে চায় যা তারা নিজেরা আগে ভাবেনি। বিস্তারিত: একজন ডেভেলপার হিসেবে আমরা যখন কোনো নতুন ফিচার দেখি, আমাদের প্রথম প্রতিক্রিয়া হয় সেটার Syntax বা লেখার ধরন নিয়ে। কিন্তু ব্রায়ানের মতে, "এই লেখাটা কেন এমন হলো?" বা "এটা কোটলিন বা স্কালা-র মতো কেন নয়?"—এই ধরনের ফিডব্যাক খুব একটা কাজে আসে না। আসল দামী ফিডব্যাক হলো সেইটা, যা নতুন কোনো বাস্তব সমস্যা (Edge Case) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...

ইমেজ ক্লাসিফিকেশন মডেল তৈরি ও প্রশিক্ষণ

ভূমিকা এই ভিডিওটিতে আমরা দেখবো কিভাবে একটি ইমেজ ক্লাসিফিকেশন মডেলকে প্রশিক্ষণ (Train) দিতে হয়। সহজ কথায়, আমাদের কাছে থাকা ছবিগুলো থেকে কম্পিউটারকে শেখানো যে, কোন ছবিটিতে কোন ব্যক্তি আছেন। এখানে আমরা ডাটাগুলোকে প্রসেস করা, মডেল নির্বাচন, এবং মডেলটি কতটা নির্ভুলভাবে কাজ করছে তা যাচাই করার প্রক্রিয়া শিখবো। ডাটা প্রিপারেশন বা প্রস্তুতি রেফারেন্স: [ 00:00 ] থেকে [ 01:03 ] মডেলকে প্রশিক্ষণ দেওয়ার আগে ডাটা ঠিকঠাক করা খুব জরুরি। ভিডিওতে দেখানো হয়েছে কিভাবে ছবিগুলো থেকে একটি ডিকশনারি বা তালিকার মতো স্ট্রাকচার তৈরি করা হয়েছে। সহজ ব্যাখ্যা: এখানে ইমেজগুলোকে সংখ্যায় রূপান্তর করা হয়েছে। কম্পিউটার সরাসরি ছবি বোঝে না, তাই সেগুলোকে ছোট ছোট ডাটা পয়েন্টের (Array) তালিকা হিসেবে সাজানো হয়েছে। যাতে মডেল বুঝতে পারে একটি ছবিতে কী কী বৈশিষ্ট্য আছে। মডেল নির্বাচন ও প্রশিক্ষণ (SVM) রেফারেন্স: [ 01:03 ] থেকে [ 04:43 ] এখানে Support Vector Machine (SVM) নামক একটি অ্যালগরিদম ব্যবহার করা হয়েছে। এটি সাধারণত ক্লাসিফিকেশনের কাজে খুব ভালো ফলাফল দেয়। পাইপলাইন (Pipeline): ডাটাকে স্কেল (Scale) করার জন্...