ক্লাসগুলি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের স্তম্ভ । ওওপি কোড সংগঠন, পুনরায় ব্যবহারযোগ্যতা এবং এনক্যাপসুলেশনের সাথে অত্যন্ত উদ্বিগ্ন।
প্রথমত, একটি অস্বীকৃতি: ওওপি আংশিকভাবে ফাংশনাল প্রোগ্রামিংয়ের বিপরীতে , যা পাইথনে প্রচুর ব্যবহৃত একটি আলাদা দৃষ্টান্ত। পাইথনে প্রোগ্রাম করা প্রত্যেকে (বা অবশ্যই বেশিরভাগ ভাষা) ওওপি ব্যবহার করে না। আপনি জাভা 8 এ অনেক কিছু করতে পারেন যা খুব বেশি অবজেক্ট ওরিয়েন্টেড নয়। আপনি যদি ওওপি ব্যবহার করতে না চান তবে ব্যবহার করবেন না। আপনি যদি ডেটা প্রক্রিয়া করার জন্য কেবল ওয়ান-অফ স্ক্রিপ্টগুলি লিখেন যা আপনি আর কখনও ব্যবহার করবেন না, তবে আপনি যেভাবে লিখছেন তা চালিয়ে যান।
তবে ওওপি ব্যবহারের অনেক কারণ রয়েছে।
কিছু কারণ:
সংস্থা: ওওপি কোডে ডেটা এবং পদ্ধতি উভয়কে বর্ণনা ও সংজ্ঞা দেওয়ার সুপরিচিত এবং মানক উপায়গুলি সংজ্ঞায়িত করে। ডেটা এবং পদ্ধতি উভয়ই সংজ্ঞার বিভিন্ন স্তরে (বিভিন্ন শ্রেণিতে) সংরক্ষণ করা যেতে পারে, এবং এই সংজ্ঞাগুলি সম্পর্কে কথা বলার জন্য স্ট্যান্ডার্ড উপায় রয়েছে। এটি হ'ল যদি আপনি ওওপিটিকে একটি স্ট্যান্ডার্ড উপায়ে ব্যবহার করেন তবে এটি আপনার পরবর্তী স্ব এবং অন্যদের আপনার কোড বুঝতে, সম্পাদনা করতে এবং ব্যবহার করতে সহায়তা করবে। এছাড়াও, জটিল, স্বেচ্ছাসেবী ডেটা স্টোরেজ মেকানিজম (ডিকটস বা তালিকার ডিকটস বা ডিক্টস বা সেটগুলির ডাইক্টের তালিকা, বা যাই হোক না কেন) ব্যবহার করার পরিবর্তে, আপনি ডেটা স্ট্রাকচারের টুকরোটির নাম রাখতে পারেন এবং সেগুলি সহজেই উল্লেখ করতে পারেন।
রাষ্ট্র: ওওপি আপনাকে সংজ্ঞায়িত করতে এবং রাষ্ট্রের উপর নজর রাখতে সহায়তা করে। উদাহরণস্বরূপ, একটি ক্লাসিক উদাহরণে, আপনি যদি এমন একটি প্রোগ্রাম তৈরি করেন যা শিক্ষার্থীদের প্রক্রিয়া করে (উদাহরণস্বরূপ, গ্রেড প্রোগ্রাম), আপনি তাদের সম্পর্কে আপনার প্রয়োজনীয় সমস্ত তথ্য এক জায়গায় রাখতে পারবেন (নাম, বয়স, লিঙ্গ, গ্রেড স্তর, কোর্স, গ্রেড, শিক্ষক, সমবয়সী, ডায়েট, বিশেষ প্রয়োজন ইত্যাদি) এবং এই তথ্যটি যতক্ষণ অবজেক্ট থাকে ততক্ষণ ধরে রাখা যায় এবং সহজেই অ্যাক্সেসযোগ্য।
এনক্যাপসুলেশন : এনক্যাপসুলেশন সহ, পদ্ধতি এবং ডেটা একসাথে সংরক্ষণ করা হয়। পদ্ধতিগুলি (ফাংশনগুলির জন্য একটি ওওপি শব্দ) তারা কাজ করে এবং উত্পাদন করে এমন ডেটার পাশাপাশি ঠিক সংজ্ঞায়িত হয়। জাভা জাতীয় ভাষায় যা অ্যাক্সেস নিয়ন্ত্রণের অনুমতি দেয় বা পাইথনে, আপনি কীভাবে আপনার সার্বজনীন এপিআই বর্ণনা করেন তার উপর নির্ভর করে এর অর্থ হল যে পদ্ধতি এবং ডেটা ব্যবহারকারীর কাছ থেকে গোপন করা যেতে পারে। এর অর্থ হ'ল যদি আপনার প্রয়োজন হয় বা কোড পরিবর্তন করতে চান তবে আপনি কোডটি প্রয়োগের জন্য যা কিছু করতে চান তা করতে পারেন, তবে সর্বজনীন API গুলি একই রাখুন keep
উত্তরাধিকার : উত্তরাধিকার আপনাকে ডেটা এবং পদ্ধতি এক জায়গায় (এক শ্রেণিতে) সংজ্ঞায়িত করতে এবং তারপরে ওভাররাইড বা সেই কার্যকারিতাটি প্রসারিত করতে দেয়। উদাহরণস্বরূপ, পাইথনে, আমি প্রায়শই লোকদের dict
অতিরিক্ত কার্যকারিতা যুক্ত করার জন্য ক্লাসের সাবক্লাস তৈরি করতে দেখি। অজানা কীটির উপর ভিত্তি করে ডিফল্ট মান দেওয়ার জন্য কোনও অভিধান থেকে একটি কী অনুরোধ করা হয় এমন একটি ব্যতিক্রম ছুঁড়ে ফেলা একটি সাধারণ পরিবর্তনটি সেই পদ্ধতিটিকে ওভাররাইড করে। এটি আপনাকে এখন বা পরে আপনার নিজের কোডটি প্রসারিত করতে, অন্যদের আপনার কোড প্রসারিত করার অনুমতি দেয় এবং আপনাকে অন্য ব্যক্তির কোড প্রসারিত করতে দেয়।
পুনরায় ব্যবহারযোগ্যতা: এই সমস্ত কারণ এবং অন্যান্য কোডের বৃহত্তর পুনঃব্যবহারযোগ্যতার জন্য অনুমতি দেয়। অবজেক্ট ওরিয়েন্টেড কোড আপনাকে একবার কঠিন (পরীক্ষিত) কোড লিখতে দেয় এবং তারপরে বারবার পুনরায় ব্যবহার করতে দেয়। আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে যদি আপনাকে কিছু টুইট করতে হয় তবে আপনি একটি বিদ্যমান বর্গ থেকে উত্তরাধিকারী হয়ে বিদ্যমান আচরণটি ওভাররাইট করতে পারেন। আপনার যদি কিছু পরিবর্তন করার প্রয়োজন হয় তবে বিদ্যমান জনসাধারণের পদ্ধতি স্বাক্ষরগুলি বজায় রেখে আপনি এগুলি সব পরিবর্তন করতে পারেন এবং কেউ জ্ঞানী (আশাবাদী) নয়।
আবার, ওওপি ব্যবহার না করার বিভিন্ন কারণ রয়েছে এবং আপনার প্রয়োজন নেই। তবে ভাগ্যক্রমে পাইথনের মতো ভাষার সাথে আপনি কেবল সামান্য বা অনেকগুলি ব্যবহার করতে পারেন এটি আপনার বিষয়।
শিক্ষার্থী ব্যবহারের ক্ষেত্রে একটি উদাহরণ (কোড মানের কোনও গ্যারান্টি নেই, কেবল একটি উদাহরণ):
অবজেক্ট ওরিয়েন্টেড
class Student(object):
def __init__(self, name, age, gender, level, grades=None):
self.name = name
self.age = age
self.gender = gender
self.level = level
self.grades = grades or {}
def setGrade(self, course, grade):
self.grades[course] = grade
def getGrade(self, course):
return self.grades[course]
def getGPA(self):
return sum(self.grades.values())/len(self.grades)
# Define some students
john = Student("John", 12, "male", 6, {"math":3.3})
jane = Student("Jane", 12, "female", 6, {"math":3.5})
# Now we can get to the grades easily
print(john.getGPA())
print(jane.getGPA())
স্ট্যান্ডার্ড ডিক্ট
def calculateGPA(gradeDict):
return sum(gradeDict.values())/len(gradeDict)
students = {}
# We can set the keys to variables so we might minimize typos
name, age, gender, level, grades = "name", "age", "gender", "level", "grades"
john, jane = "john", "jane"
math = "math"
students[john] = {}
students[john][age] = 12
students[john][gender] = "male"
students[john][level] = 6
students[john][grades] = {math:3.3}
students[jane] = {}
students[jane][age] = 12
students[jane][gender] = "female"
students[jane][level] = 6
students[jane][grades] = {math:3.5}
# At this point, we need to remember who the students are and where the grades are stored. Not a huge deal, but avoided by OOP.
print(calculateGPA(students[john][grades]))
print(calculateGPA(students[jane][grades]))