1. অবজেক্ট এবং ক্লাস

আজ আপনি একটি সাধারণ জাভা প্রোগ্রাম কিভাবে কাজ করে সে সম্পর্কে একটু শিখবেন। এখানে বড় খবর: প্রতিটি জাভা প্রোগ্রাম ক্লাস এবং অবজেক্ট নিয়ে গঠিত।

আপনি ইতিমধ্যে ক্লাস কি জানেন, কিন্তু বস্তু কি?

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

এটা জাভা প্রোগ্রামিং একই.

ব্লুপ্রিন্ট

একজন প্রোগ্রামার একজন ডিজাইনারের মতো। একজন ডিজাইনার ব্লুপ্রিন্ট তৈরি করেন এবং একজন জাভা প্রোগ্রামার ক্লাস লেখেন। অংশগুলি ব্লুপ্রিন্টের উপর ভিত্তি করে তৈরি করা হয়, এবং বস্তুগুলি ক্লাসের উপর ভিত্তি করে তৈরি করা হয়।

প্রথমে, আমরা ক্লাস লিখি (ব্লুপ্রিন্ট তৈরি করি), এবং তারপরে, প্রোগ্রাম চালানোর সাথে সাথে জাভা মেশিন এই ক্লাসগুলির উপর ভিত্তি করে অবজেক্ট তৈরি করে। ঠিক একইভাবে ব্লুপ্রিন্ট থেকে জাহাজ তৈরি করা হয়।

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

অথবা এখানে আরেকটি উপমা আছে...

অ্যান্থিল

একটি anthill বস্তু কিভাবে মিথস্ক্রিয়া একটি ভাল উদাহরণ. একটি সাধারণ পিঁপড়ার মধ্যে তিনটি শ্রেণির পিঁপড়া রয়েছে: রানী, সৈন্য এবং শ্রমিক।

একেক শ্রেণীর পিঁপড়ার সংখ্যা একেক রকম। পুরো অ্যান্থিলের জন্য একক রানী রয়েছে, তবে কয়েক ডজন সৈন্য এবং শত শত কর্মী পিঁপড়া রয়েছে। তিনটি শ্রেণী এবং শত শত বস্তু। পিঁপড়ারা একে অপরের সাথে যোগাযোগ করে - তাদের একই শ্রেণীর পিঁপড়ার সাথে এবং অন্যান্য শ্রেণীর পিঁপড়ার সাথে - কঠোর নিয়ম অনুসারে।

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

এই দুটি উপমা একই মুদ্রার দুটি দিক। সত্য মাঝখানে। প্রথম উদাহরণ (একটি ব্লুপ্রিন্ট এবং জাহাজ সম্পর্কে) একটি শ্রেণী এবং সেই শ্রেণীর বস্তুর মধ্যে সম্পর্ক দেখায়। এটি একটি শক্তিশালী উপমা। দ্বিতীয় উদাহরণ (একটি anthill সম্পর্কে) লিখিত ক্লাস এবং প্রোগ্রাম চালানোর সাথে সাথে বিদ্যমান বস্তুর মধ্যে সম্পর্ক দেখায়।

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

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

ডকুমেন্টেশন

এবং কিভাবে আপনি পদ্ধতি পাস করতে কি তথ্য জানেন? আপনার আগে যারা এসেছিল তারা সবকিছু ভেবেছিল।

প্রতিটি ক্লাসের সাধারণত একটি বর্ণনা থাকে যা বলে যে এটি কিসের জন্য তৈরি করা হয়েছিল। এছাড়াও, প্রতিটি পাবলিক পদ্ধতিতে সাধারণত একটি বিবরণ থাকে যা নির্দেশ করে যে এটি কী করে এবং এটিতে কোন ডেটা প্রেরণ করা দরকার।

একটি ক্লাস ব্যবহার করার জন্য, এটি কী করে সে সম্পর্কে আপনার একটি সাধারণ ধারণা থাকতে হবে। এবং প্রতিটি পদ্ধতি ঠিক কি করে তা আপনাকে জানতে হবে। তবে এটি কীভাবে করে তা আপনার জানার দরকার নেই। এটা একটা জাদুর কাঠির মত।

আসুন একটি ফাইল কপি করার জন্য কোডটি দেখে নেওয়া যাক:

c:\\data.txt ফাইলটি c:\\result.txt ফাইলে অনুলিপি করা হচ্ছে
package com.codegym.lesson2;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy
{
   public static void main(String[] args) throws IOException
   {
      FileInputStream fileInputStream = new FileInputStream("c:\\data.txt");
      FileOutputStream fileOutputStream = new FileOutputStream("c:\\result.txt");

      while (fileInputStream.available() > 0)
      {
         int data = fileInputStream.read();
         fileOutputStream.write(data);
      }

      fileInputStream.close();
      fileOutputStream.close();
   }
}

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


2. একটি প্রোগ্রাম ডিজাইন করা

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

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

মূল জিনিসটি হল আপনি কার জন্য কোড লিখছেন তা বোঝা। এবং আপনি অন্যান্য প্রোগ্রামারদের জন্য কোড লিখুন ।

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

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

তাহলে আপনি কিভাবে ভাল, পরিষ্কার কোড লিখবেন?

এটি করার জন্য তিনটি জিনিস প্রয়োজন:

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

এই ধারণার পিছনে কি আছে?

পদ্ধতির ভিতরে ভাল কোড লেখা

আপনার যদি এমনকি প্রাথমিক ইংরেজি দক্ষতাও থাকে, আপনি হয়তো লক্ষ্য করেছেন যে কখনও কখনও ইংরেজি বাক্য হিসাবে কোড পড়া কতটা সহজ হতে পারে:

  • class Cat extends Pet— এর মানে হল বিড়াল শ্রেণী পোষা শ্রেণীকে প্রসারিত করে
  • while(stream.ready())- যতক্ষণ না স্রোত প্রস্তুত হয়...
  • if (a<b) return a; else return b- аএর চেয়ে কম হলে b, ফেরত দিন а, অন্যথায় ফেরত দিন b

এটা ইচ্ছাকৃত। জাভা হল বেশ কয়েকটি ভাষার মধ্যে একটি যা স্ব-নথিপত্র কোড লেখা সহজ করে, অর্থাৎ কোড যা মন্তব্য ছাড়াই বোধগম্য। ভালো জাভা কোডে, অনেক পদ্ধতি ইংরেজি বাক্যের মতোই পড়ে।

কোড লেখার সময়, আপনার কাজটি যতটা সম্ভব সহজ এবং সংক্ষিপ্ত করা। আপনার কোডটি পড়া সহজ কিনা তা ভেবে দেখুন এবং আপনি সঠিক পথে চলতে শুরু করবেন।

জাভাতে, সহজে পড়ার মতো কোড লেখার প্রথা রয়েছে। বিশেষভাবে, একটি পদ্ধতির সমস্ত কোড একটি একক স্ক্রিনে (যেমন 20-30 লাইন) ফিট হবে। এটি সমগ্র জাভা সম্প্রদায়ের জন্য আদর্শ। কোড উন্নত করা যেতে পারে, এটি উন্নত করা উচিত.

ভাল কোড কিভাবে লিখতে হয় তা শেখার সর্বোত্তম উপায় হল অনুশীলনের মাধ্যমে। প্রচুর কোড লিখুন, অন্যদের কোড অধ্যয়ন করুন এবং আরও অভিজ্ঞ সহকর্মীদের আপনার কোড পর্যালোচনা করতে বলুন।

এবং মনে রাখবেন যে মুহুর্তে আপনি নিজেকে বলবেন "একা একা থাকতে দিন", আপনার বৃদ্ধি বন্ধ হয়ে যায়।

প্রোগ্রামে কোন সত্তাকে অন্তর্ভুক্ত করা উচিত তা নির্ধারণ করা

আপনাকে কোড লিখতে হবে যা অন্য প্রোগ্রামাররা বুঝতে পারে। যদি 10 জনের মধ্যে 9 জন প্রোগ্রামার একটি প্রোগ্রামের ডিজাইনে ক্লাস A, B এবং C অন্তর্ভুক্ত করে, তাহলে আপনার প্রোগ্রামে A, B এবং C ক্লাস করা উচিত। আপনাকে অবশ্যই কোড লিখতে হবে যা অন্যরা বুঝতে পারে।

দুর্দান্ত, কাজ করে, দ্রুত, কিন্তু অ-মানক কোড হল খারাপ কোড।

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

এবং যাইহোক, আপনি ইতিমধ্যেই একটি চমৎকার, জনপ্রিয়, এবং ভালোভাবে নথিভুক্ত প্রকল্পে অ্যাক্সেস পেয়েছেন — Java SDK । এটি দিয়ে শুরু করুন।

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

একবার আপনি এই সমস্ত প্রশ্নের উত্তর বুঝতে শুরু করলে, আপনি কোড লিখতে সক্ষম হবেন যা অন্যরা বুঝতে পারে।

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

প্রোগ্রামটিকে সঠিকভাবে লজিক্যাল অংশে বিভক্ত করা

প্রায় প্রতিটি প্রোগ্রাম অংশ বা মডিউল বিভক্ত করা হয়. প্রতিটি অংশ প্রোগ্রামের নিজস্ব দিক জন্য দায়ী.

একটি কম্পিউটারে একটি মাদারবোর্ড, একটি মনিটর এবং কীবোর্ড রয়েছে - এগুলি সবই আলাদা, আলগাভাবে জোড়া অংশ। আরও কি, তারা মানসম্মত উপায়ে ইন্টারঅ্যাক্ট করে: USB, HDMI, ইত্যাদি। আপনি যদি আপনার কীবোর্ডে কফি ছড়িয়ে দেন, তাহলে আপনি এটিকে সিঙ্কে ধুয়ে ফেলতে পারেন, শুকাতে দিতে পারেন এবং তারপরে এটি ব্যবহার চালিয়ে যেতে পারেন।

কিন্তু একটি ল্যাপটপ একটি মনোলিথিক স্থাপত্যের একটি উদাহরণ: মনে হয় আমরা পৃথক যৌক্তিক অংশগুলি বুঝতে পারি, তবে সেগুলি অনেক বেশি সমন্বিত। একটি MacBookPro-এ, কীবোর্ড পরিষ্কার করতে আপনাকে ল্যাপটপের অর্ধেক অংশ আলাদা করতে হবে। এবং একটি ল্যাপটপে আপনার কফি ছড়িয়ে দেওয়া একটি নতুন ল্যাপটপ অর্ডার করার একটি কারণ। এক কাপ কফি নয়।


3. আপনার নিজস্ব ক্লাস তৈরি করা

কিন্তু যেহেতু আপনি শুধু প্রোগ্রাম শিখছেন, তাই আপনার নিজের ক্লাস তৈরি করতে শিখে ছোট শুরু করা উচিত।

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

সত্তার তালিকা

কোথা থেকে শুরু করবেন তা না জানলে শুরু থেকে শুরু করুন।

আপনি যখন প্রথম একটি প্রোগ্রাম ডিজাইন করা শুরু করেন, আপনি কেবল একটি কাগজের টুকরো ধরতে পারেন এবং প্রোগ্রামে থাকা সত্তাগুলির (বস্তু) একটি তালিকা লিখতে পারেন। এবং তারপর নীতি অনুযায়ী কোড লিখুন যে প্রতিটি সত্তা একটি পৃথক শ্রেণী।

উদাহরণ

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

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

দাবা

ধরুন আমরা দাবার জন্য ক্লাস লেখার সিদ্ধান্ত নিয়েছি: এই ক্লাসগুলি দেখতে কেমন হবে?

দাবাবোর্ড কি শুধু একটি 8 বাই 8 অ্যারে? একটি পৃথক ক্লাস তৈরি করা ভাল যা অভ্যন্তরীণভাবে একটি অ্যারের একটি রেফারেন্স সংরক্ষণ করে। তারপরে আপনি "চেসবোর্ড" ক্লাসে প্রচুর দরকারী পদ্ধতি যোগ করতে পারেন, উদাহরণস্বরূপ, একটি নির্দিষ্ট ঘর খালি বা দখল করা আছে কিনা তা পরীক্ষা করতে

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


4. স্ট্যাটিক ভেরিয়েবল এবং পদ্ধতি

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

স্ট্যাটিক ভেরিয়েবল, যা প্রোগ্রামের যেকোন জায়গা থেকে অ্যাক্সেস করা যায়, সাধারণত "সর্বদা বিদ্যমান" বস্তুর রেফারেন্সের কাছাকাছি যাওয়া এড়াতে ব্যবহৃত হয়।

উদাহরণস্বরূপ, এই মত:

কোড বিঃদ্রঃ
public class ChessBoard
{
   public static ChessBoard board = new ChessBoard();
   public ChessItem[][] cells = new ChessItem[8][8];
   ...
}

public class Game
{
   public static void main(String[] args)
   {
      var board = ChessBoard.board;
      board.cells[0][3] = new King(Color.WHITE);
      board.cells[0][4] = new Queen(Color.WHITE);
      ...
   }
}


একটি একক ChessBoardবস্তুর একটি উল্লেখ।
একটি 8x8 দ্বি-মাত্রিক অ্যারে, একটি স্ট্যাটিক পরিবর্তনশীল নয়।








বোর্ডে টুকরা যোগ করুন।

অথবা একটি স্ট্যাটিক ভেরিয়েবলের পরিবর্তে, আপনি একটি পদ্ধতি তৈরি করতে পারেন যা একটি সিঙ্গলটন বস্তু প্রদান করে। উদাহরণস্বরূপ, এই মত:

public class ChessBoard
{
   private static ChessBoard board = new ChessBoard();
   public static ChessBoard getBoard()
   {
      return board;
   }

   public ChessItem[][] cells = new ChessItem[8][8];
   ...
}

public class Game
{
   public static void main(String[] args)
   {
      var board = ChessBoard.getBoard();
      board.cells[0][3] = new King(Color.WHITE);
      board.cells[0][4] = new Queen(Color.WHITE);
      ...
   }
}