আপনি কি ক্লাস কীওয়ার্ড ছাড়াই "অবজেক্ট-ওরিয়েন্টেড" প্রোগ্রামিং বাস্তবায়ন করতে পারবেন?


29

বলুন আমরা একটি ব্যাংকে একটি "অ্যাকাউন্ট" এর বিমূর্ততা সরবরাহ করতে চাই। functionপাইথনে একটি অবজেক্ট ব্যবহার করে এখানে একটি পদ্ধতির কথা বলা হয়েছে:

def account():
    """Return a dispatch dictionary representing a bank account.

    >>> a = account()
    >>> a['deposit'](100)
    100
    >>> a['withdraw'](90)
    10
    >>> a['withdraw'](90)
    'Insufficient funds'
    >>> a['balance']
    10
    """
    def withdraw(amount):
        if amount > dispatch['balance']:
            return 'Insufficient funds'
        dispatch['balance'] -= amount
        return dispatch['balance']
    def deposit(amount):
        dispatch['balance'] += amount
        return dispatch['balance']
    dispatch = {'balance': 0,
                'withdraw': withdraw,
                'deposit': deposit}
    return dispatch

প্রকার বিমূর্তি ব্যবহার করে (যেমন, classপাইথনের কীওয়ার্ড) ব্যবহার করে এখানে আরও একটি পদ্ধতি রয়েছে :

class Account(object):
    """A bank account has a balance and an account holder.

    >>> a = Account('John')
    >>> a.deposit(100)
    100
    >>> a.withdraw(90)
    10
    >>> a.withdraw(90)
    'Insufficient funds'
    >>> a.balance
    10
    """



    def __init__(self, account_holder):
        self.balance = 0
        self.holder = account_holder

    def deposit(self, amount):
        """Add amount to balance."""
        self.balance = self.balance + amount
        return self.balance

    def withdraw(self, amount):
        """Subtract amount from balance if funds are available."""
        if amount > self.balance:
            return 'Insufficient funds'
        self.balance = self.balance - amount
        return self.balance

আমার শিক্ষক classকীওয়ার্ডটি প্রবর্তন করে এবং আমাদের বুলেট পয়েন্টগুলি দেখিয়ে "অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং" শীর্ষক বিষয়টি শুরু করেছিলেন :

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং

মডুলার প্রোগ্রামগুলি সংগঠিত করার জন্য একটি পদ্ধতি:

  • বিমূর্ততা বাধা
  • বার্তা পাস হচ্ছে
  • তথ্য এবং সম্পর্কিত আচরণ একসাথে বান্ডিলিং

আপনি কি মনে করেন উপরোক্ত সংজ্ঞাটি পূরণ করার জন্য প্রথম পদ্ধতির যথেষ্ট হবে? যদি হ্যাঁ, তবে classঅবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের জন্য কীওয়ার্ডটির আমাদের প্রয়োজন কেন ?


2
আপনি সন্তুষ্ট হন খুশি। =) যদিও আমি পাইথনকে পুরোপুরি উত্তর দেওয়ার পক্ষে যথেষ্টভাবে জানি না, তবে আপনি এটি জানতে আগ্রহী হতে পারেন যে জাভাস্ক্রিপ্টে ওওপি করার সাধারণ পদ্ধতিটি আপনার বর্ণিত "ফাংশন অবজেক্ট" এর অনুরূপ (যদিও আমাদের প্রোটোটাইপাল উত্তরাধিকারও রয়েছে যা প্রতিটি বস্তুতে প্রতিটি পদ্ধতির পৃথক অনুলিপি না রেখে বস্তুগুলিকে "ভাগ" করার পদ্ধতিগুলিকে মঞ্জুরি দেয়; আমি ধরে নিই পাইথনের classঅনুরূপ অপ্টিমাইজেশন রয়েছে)।
Ixrec

আপনি যদি বিশদ উত্তর চান তবে আপনার অন্য একটি প্রশ্ন জিজ্ঞাসা করা বা চ্যাট রুমে যোগদান করা উচিত, তবে সংক্ষিপ্ত উত্তরটি হল (আপনি যদি প্রোটোটাইপাল উত্তরাধিকার, অ্যারে ইত্যাদি পুরোপুরি উপেক্ষা করেন) যা মূলত সত্য; বেশিরভাগ জেএস অবজেক্টগুলি স্বেচ্ছাচারিত মানগুলির স্ট্রিং কীগুলির অভিধান ছাড়া আর কিছুই নয়। foo.bar()সাধারণত অনুরূপ foo['bar'](), এবং বিরল ঘটনাগুলিতে পরবর্তী সিনট্যাক্স আসলে দরকারী।
Ixrec


8
এটি ওওপি সম্পর্কে একটি মৌলিক বোঝার পথে আপনার পক্ষে সত্যই গুরুত্বপূর্ণ একটি প্রশ্ন। আপনি যদি আগ্রহী হন তবে আপনি আমার একটি ব্লগ পোস্ট পড়তে পারেন যেখানে আমি জাভাস্ক্রিপ্টে ভাষার কোনও ওওপি অংশের উপর নির্ভর না করে একটি সাধারণ অবজেক্ট সিস্টেম তৈরি করি। আপনার 1 ম উদাহরণের একটি গুরুত্বপূর্ণ ত্রুটি রয়েছে: আপনি যেখানে লিখবেন সেখানে object['method'](args)পাইথন অবজেক্টগুলি আসলে এর সমতুল্য করে object['method'](object, args)। যখন বেস ক্লাসটি শিশু শ্রেণিতে পদ্ধতিগুলি কল করে, এটি কৌশলগত প্যাটার্নে প্রাসঙ্গিক হয়।
আমন

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

উত্তর:


66

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

তবে অবজেক্ট ওরিয়েন্টেড দৃষ্টান্তটি এতটাই সফল হয়েছিল যে প্রচুর ভাষা - এবং পাইথনও এর ব্যতিক্রম নয় - এর জন্য অন্তর্নির্মিত সমর্থন সরবরাহ করে। এটি সহজভাবে বিকাশকারীদের দৃষ্টান্তটি ব্যবহার করা সহজ করতে এবং সেই ভাষার জন্য অবজেক্ট অরিয়েন্টেশনের একটি স্ট্যান্ডার্ড ফর্ম সরবরাহ করা। প্রচুর ভাষাগুলি একটি forলুপ সরবরাহ করে কেন এটি মূলত একই কারণ , যদিও এটি whileকেবল একটি বা দুটি অতিরিক্ত লাইন কোডের লুপ ব্যবহার করে অনুকরণ করা যেতে পারে - কেবল ব্যবহারের সহজলভ্যতা


"সেই ভাষার জন্য অবজেক্ট অরিয়েন্টেশনের একটি স্ট্যান্ডার্ড ফর্ম সরবরাহ করতে" আমি কি সেখানে জাভাস্ক্রিপ্টের সমালোচনা শুনতে পাচ্ছি? ;)
jpmc26

1
@ jpmc26: ইচ্ছাকৃতভাবে নয়। এবং দেখে মনে হচ্ছে জাভাস্ক্রিপ্টে কীভাবে অবজেক্ট তৈরি করা হয় সেখানে কিছু বিস্তৃত স্বীকৃত মান রয়েছে।
ডক ব্রাউন

@ সার্বভৌম পরিবর্তন: আপনার কাছে জিজ্ঞাসা করার মতো প্রশ্ন আছে?
ডক ব্রাউন

1
@ সার্বভৌম এক্সচেঞ্জ: আচ্ছা, ওওপি বলতে কী বিতর্কযোগ্য তা বোঝা যায়, বিভিন্ন চিন্তাভাবনা রয়েছে, তবে এসআইসিপি সংজ্ঞা আপনার প্রশ্নের 3 টি বুলেট পয়েন্টের তুলনায় অনেকটাই এক। এটি অবশ্যই বিমূর্ততা তৈরির বিষয়ে, তবে পয়েন্ট 2 এবং 3 ভুলে যাবেন না, হ্যাঁ, ওওপি ধারণাটি "রাষ্ট্র পরিবর্তন" ঘিরে রেখেছে, তবে এটি "অপরিবর্তনীয় বস্তুর" ধারণাকেও অনুমোদন করে (জাভা বা সি # তে স্ট্রিং ক্লাসের মতো, পাইথন কিছু পরিবর্তনযোগ্য এবং কিছু অপরিবর্তনীয় ডেটা প্রকারগুলিও রয়েছে)। এবং আপনার প্রশ্নে আপনার প্রথম উদাহরণ সেই সংজ্ঞাটির সাথে আপনার দ্বিতীয় উদাহরণেরও নিশ্চয়তা দেয়।
ডক ব্রাউন

2
@ সার্বভৌম এক্সচেঞ্জ: এটি অ্যালেন কে'র অবজেক্ট অরিয়েন্টেশন (সংক্ষিপ্ত আলাপ ভাষার উদ্ভাবক) এর সংজ্ঞায় ফিরে যায়। আপনি এই স্ট্যাকওভারফ্লো . com/ জিজ্ঞাসা / 2347973/… প্রাক্তন এসও নিবন্ধে একটি বিস্তৃত উত্তর পাবেন । এসআইসিপি অর্থে আইএমএইচও "অবজেক্টগুলির মধ্যে পাসিং" বার্তার অর্থ কেবল কোনও "সংজ্ঞায়িত যোগাযোগ প্রোটোকল" এর মাধ্যমে সরাসরি কোনও বস্তুর অভ্যন্তরীণ ডেটা অ্যাক্সেস না করা। পাইথনের মতো ওও ভাষায় এর অর্থ কেবল "কোনও বস্তুর পদ্ধতি কল করুন" mean
ডক ব্রাউন

13

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

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

আপনি এখানে শ্রেণীর কীওয়ার্ডটি থেকে কী অনুমান করতে পারবেন তা হ'ল, ভাষাটি এই ধরণের বাক্সটি তৈরির জন্য সমর্থন সরবরাহ করে এবং কার্যকারিতাটি পুনরায় বাস্তবায়নের জন্য আপনাকে সমস্ত হুপের মাধ্যমে দরকার হয় না (যা এতে বেশ মজাদার কাজ is নিজেই!)। আপনি পেতে পারেন এমন সমস্ত সিনট্যাকটিক চিনির উল্লেখ না করা।


উত্তরাধিকার সম্পর্কে কি? আমরা কি রিয়েল টাইমে সাব টাইপ / সুপার টাইপগুলি সম্পর্কে গুরুত্বপূর্ণ? আমার প্রথম পদ্ধতির এটি বিনোদন নাও পারে !!
ওভাররেচেন্জ

5
উত্তরাধিকার কোনওভাবেই ওওপি-র জন্য প্রয়োজন হয় না। আপনি নিজের প্রথম উদাহরণেও উত্তরাধিকার প্রয়োগ করতে পারেন। এটি স্থানান্তর খুব "পরিষ্কার" হতে পারে না তবে সমস্ত একই হতে পারে।
জাভিয়র

3
@ জাভিয়র এই মন্তব্য আমাকে ভিবি 6 সম্পর্কে ভাবতে বাধ্য করে। উত্তরাধিকার ব্যতীত অবজেক্ট অরিয়েন্টেড প্রকৃতপক্ষে কম পরিষ্কার কোড তৈরি করেছে, এটিকে হালকাভাবে রাখার জন্য।
রাবারডাক

1
@ সার্বভৌম পরিবর্তন যখন আপনি এটি সম্পর্কে চিন্তা করেন, উত্তরাধিকারগুলি ক্লাসের মধ্যে সাধারণ কোড / আচরণ ভাগ করে নেওয়া সম্পর্কে। কোনও কিছুই আপনাকে সমস্ত সময় সেই কোডটি পুনরাবৃত্তি করতে বাধা দেয় না। যদিও বজায় রাখা অত্যন্ত ভয়ঙ্কর হবে। উত্তরাধিকার বিদ্যমান থাকার একটি কারণ রয়েছে :)
জাভিয়র

1
@ জাভিয়র এর সবচেয়ে বেসিক আকারে "সাবক্লাসিং" একটি বিমূর্ততা যা বলেছে "আপনি এখানে উচ্চতর অর্ডার প্রেরণ এবং ডেটা থাকার ফাংশনটি আমি এখানে সংজ্ঞায়িত করছি (যা আমরা" শ্রেণি "হা হা হিসাবে দেখাব এইচ), এই প্যারেন্টফু দ্বারা উল্লিখিত 'সুপারক্লাস' প্রেরণ-এবং-ডেটা-থাকার ফাংশন ইনস্ট্যান্ট করুন। সত্যিই এটি হয়। যখন একাধিক-উত্তরাধিকার নিষ্পাপ করার কথা আসে তবে বাস্তবে এটি এখনও সমস্ত কিছু, তবে আপনি যে "হীরা সমস্যা" প্রবর্তন করেন তা সহকারে একাধিক উত্তরাধিকার সফল হয়।
zxq9

9

অবশ্যই আপনি করতে পারেন!

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

আরও তথ্যের জন্য আপনার http://www.selflanguage.org/ পরীক্ষা করা উচিত । আমি মনে করি এটি খুব আকর্ষণীয় এবং আপনি যদি ওওপি পছন্দ করেন তবে এমন কিছু যা সাধারণ হয় না তা পরীক্ষা করা ভাল ধারণা।


0

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

ডক ব্রাউন এর দুর্দান্ত উত্তর রয়েছে তবে আমি যে বিন্দুটি তৈরির চেষ্টা করছি সেটি হ'ল আমি নিশ্চিত যে কমপক্ষে একটি ভাষা আছে যা আপনার সমাধানটিকে একেবারেই মঞ্জুরি দেয় না।


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

আমি চাই যে আমি এমন একটি ভাষার নাম বলব যাতে আমার উত্তরটি যাচাই করার জন্য ক্লাস ব্যবহার করা একেবারে প্রয়োজন। তবে আমি কেবল কয়েকটি ভাষা জানি এবং হায় আফ্রিকা জাভা কাজ করার সুযোগ দেয়। সি ++ এর স্ট্রাক্ট রয়েছে এবং জাভাস্ক্রিপ্ট ফ্ল্যাট আউট যা আপনাকে প্রদর্শিত হয়েছিল তা মঞ্জুরি দেয়। আমি সন্দেহ করি যে স্মার্টটাক এবং আইফেলের ক্লাসের প্রয়োজন হতে পারে যেহেতু আমি শুনেছি তারা কঠোরভাবে কাঠামোযুক্ত।
SkySpiral7

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

1
প্রতিটি বৈধ জাভা প্রোগ্রামে মূল classশব্দটি অবশ্যই থাকা উচিত যাতে এটি আশ্চর্যের কিছু নয়। তবে আপনি জাভা অবজেক্ট সিস্টেমের উপরে আপনার নিজের অবজেক্ট সিস্টেমটি পুরোপুরি বাস্তবায়ন করতে পারেন, যদিও আপনি কেন এমন কাজ করতে চান তা আমি জানি না।
ব্রায়ান গর্ডন

১. জাভা এই ক্ষেত্রে সত্যিই বিশেষ, যেহেতু এটি কাস্টম ডেটা স্ট্রাকচার তৈরি করতে ব্যবহৃত হতে পারে এমন সমস্ত অন্যান্য কীওয়ার্ড সরিয়ে ফেলেছে। আমি জানি যে প্রায় সমস্ত অন্যান্য ভাষা রেকর্ড বা বন্ধ হয়ে যায়। ২. এমনকি জাভাতেও আপনি অ্যারে থেকে তৈরি একটি স্মৃতিতে প্রোগ্রাম করতে পারেন । এবং আপনি এর মধ্যে অবজেক্ট ওরিয়েন্টেশন বাস্তবায়ন করতে পারেন , classকীওয়ার্ডটি ব্যবহার করে শুধুমাত্র ভাষার জন্য আপনার ক্লাসে আপনার ফাংশন রাখা প্রয়োজন। অবশ্যই এটি অত্যন্ত তাত্ত্বিক, তবে জাভাতেও আপনি বিল্টিন ক্লাসগুলি ছাড়াই অবজেক্ট ওরিয়েন্টেশন করতে পারেন!
25'15

0

আপনার শিক্ষকের সংজ্ঞাটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের সবচেয়ে গুরুত্বপূর্ণ পয়েন্টটি পুরোপুরি মিস করে, এটি একটি জিনিস যা এটি দরকারী এবং অনন্য করে তোলে। "বার্তা উত্তরণ" হ'ল স্মল্টক লোকেরা স্বপ্ন দেখেছিল এমন এক ধরণের বাজে কথা এবং এটি যেখানে চেষ্টা করা হয়েছে সেখানেই এটি ব্যর্থ হয়েছে। ওওপির সত্যিকারের শক্তি লিসকভ প্রতিস্থাপন হিসাবে পরিচিত , এবং ধারণাটি বর্ণনা এবং বুঝতে মোটামুটি সহজ, অন্তর্নিহিত বাস্তবায়ন যথেষ্ট জটিল যে ভাষা-স্তরের সমর্থন ব্যতীত সঠিকভাবে করা অসম্ভব।

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

উদাহরণস্বরূপ, জিইউআই ফ্রেমওয়ার্কগুলি পুরো জায়গা জুড়ে লিসকোভ প্রতিস্থাপন ব্যবহার করে। তাদের একটি বেস Controlক্লাস থাকে যা "যে কোনও নিয়ন্ত্রণ" উপস্থাপন করতে পারে, যা একটি ইন্টারফেসকে সংজ্ঞায়িত করে যা অঙ্কন, আকার পরিবর্তন এবং ব্যবহারকারী ইনপুটটিতে প্রতিক্রিয়া জানানোর মতো প্রাথমিক ক্রিয়াকলাপ সম্পর্কে জানে। আপনি যদি কোনও নিয়ন্ত্রণে ক্লিক করেন তবে ইউআই কাঠামোটি Clickকী ধরণের নিয়ন্ত্রণ তা সম্পর্কে চিন্তা না করেই নিয়ন্ত্রণের কোনও পদ্ধতি কল করবে এবং তারপরে নিয়ন্ত্রণটি তার নিজস্ব শ্রেণীর জন্য উপযুক্তভাবে ক্লিক করতে পারে। একটি Buttonনিয়ন্ত্রণের পরিবর্তে ক্লিক করার সময় TextBoxনিয়ন্ত্রণের সম্পূর্ণ আলাদা কিছু করা উচিত , কেবল একটি উদাহরণ দেওয়া।

সুতরাং হ্যাঁ, আপনি উপরে বর্ণিত নেস্টেড ফাংশন ট্রিক ব্যবহার করে অবজেক্টগুলির মতো কিছু জাতীয় অনুরূপ তৈরি করতে পারেন তবে আপনি উত্তরাধিকার এবং লিসকভের প্রতিস্থাপনটি সেভাবে পেতে পারেন না, এটি সত্য ওওপির জন্য একটি অত্যন্ত সীমিত বিকল্প itute


সি ভাষায় আমি কি 'স্ট্রাক্ট প্যারেন্ট {}' এবং তারপরে 'স্ট্রাক্ট চাইল্ড {স্ট্রাক্ট প্যারেন্ট * পিটিআর;}' বলতে পারি না? এটি নন-ওওপ ভাষার বাক্য গঠনতে উত্তরাধিকার নয়?
overexchange

@ সার্বজনীন পরিবর্তন: এটি এটিকে জাল করার একটি অ-ওও চেষ্টা, তবে সংকলক আপনাকে অন্যটির পরিবর্তে স্থান দিতে দেবে না । (আপনি কোনও ফাংশনটিতে একটি পাস করতে পারবেন না child*যা parent*একটি আর্গুমেন্ট হিসাবে গ্রহণ করে , কমপক্ষে কোনও টাইপকাস্ট ছাড়া না)) এবং আরও খারাপটি, সি স্ট্রাক্টগুলিতে তাদের আবদ্ধ পদ্ধতি থাকতে পারে না এবং ভার্চুয়াল পদ্ধতিগুলির জন্য কোনও সমর্থন নেই , যা লিসকভের প্রতিস্থাপনের কাজটি কী জাদু তৈরি করে, তাই আপনাকে হাতে ভিএমটি তৈরি করতে হবে, এটি জটিল প্রক্রিয়া যা সহজেই আঁকতে পারে।
ম্যাসন হুইলারের

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

1
@ সার্বজনীন পরিবর্তন জাভা কখন থেকে "প্রোগ্রামার্স স্বর্গ" হয়?
ব্র্যান্ডিন

1
বার্তা পাসিং হয়েছে না স্মলটক, Erlang, অথবা এমনকি জাভা-শৈলী গলি সিস্টেমের মধ্যে ব্যর্থ প্রমাণিত যেখানে চেয়ে "ফাংশন কল" (কিউটি এর সংকেত & স্লট পুরাতন জাভা বিপনন বনাম একটি threadsafe কিউ সঙ্গে দীর্ঘ সময়ের ব্যবহার "বার্তা" "বার্তা" অর্থ ভিন্ন কিছু যখন এর অর্থ "পদ্ধতি কল")। বার্তা! = ফাংশন কল জেনুইন ম্যাসেজিং কেবল সফল নয়, এটি কেবলমাত্র বৃহত্তর একযোগে এবং শক্তিশালী সিস্টেমগুলি লিখতে আমরা জানি be 'শ্রেণি' কীওয়ার্ড ছাড়াই জাভা-স্টাইলের ওওপি বাস্তবায়নের ক্ষেত্রে এটি অর্থেগোনাল। এটা করা যেতে পারে। এটি সবসময় কার্যকর হয় না । মেসেজিং পয়েন্টের পাশে রয়েছে।
zxq9

-1

দ্রুত সংক্ষিপ্ত উত্তর

হ্যাঁ, প্রোগ্রামাররা "ক্লাস" ছাড়াই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং প্রয়োগ করতে পারে।

দীর্ঘ বিরক্তিকর বিস্তৃত বর্ণনামূলক উত্তর

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

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

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.