পলিমারফিজম কী, এটি কীসের জন্য এবং এটি কীভাবে ব্যবহৃত হয়?


564

পলিমারফিজম কী, এটি কীসের জন্য এবং এটি কীভাবে ব্যবহৃত হয়?


19
@ জন: +1 আমি সম্মত হলাম এটি একটি অত্যন্ত আকর্ষণীয় ঘটনা। আমি নিশ্চিত যে আনকউনটেক একমাত্র জ্ঞানযোগ্য, দক্ষ ব্যক্তি নয় যা অন্যরা যেহেতু অর্থায়নমূলক শব্দভাণ্ডার হিসাবে বিবেচিত হবে তার ফাঁক রয়েছে। কেবল প্রোগ্রামিং দেখাতে যেতে খুব বিস্তৃত বিষয়।
অ্যান্থনিডাব্লু জোন্স

9
তিনি এটি ব্যবহার করতে পারেন, কেবল এটির নাম দিন না।
এইডেন বেল

10
@ আমির: আমি নিশ্চিত যে এই ধারণাটি গ্রহণযোগ্য নয় যে 8 কে আক্রান্ত ব্যক্তি প্রোগ্রামিংয়ের সমস্ত ক্ষেত্রে সমস্ত তহবিল জানতে পারবেন know এছাড়াও আমি মনে করি না এটি ইঙ্গিত দেয় যে খ্যাতি ব্যবস্থাটি অসম্পূর্ণ। কেউ অনেক ভাল প্রশ্ন জিজ্ঞাসা করে যথেষ্ট খ্যাতি অর্জন করতে পারে। আমি মনে করি এই প্রত্যাদেশের জন্য আমাদের প্রাকৃতিক প্রতিক্রিয়া কেবল আমাদের (প্রোগ্রামারদের) কিছুটা সংকীর্ণ মনের (আমাদের কোনও নির্দিষ্ট প্রযুক্তিগত ক্ষেত্রে সত্যই ভাল হওয়া দরকার যখন খারাপ জিনিস নয়) হওয়ার স্বাভাবিক প্রবণতা দেখায় এবং এটির ডাউনসাইডগুলি থাকে।
অ্যান্টনি ডাব্লু জোন্স

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

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

উত্তর:


544

আপনি যদি শব্দটির গ্রীক শিকড় সম্পর্কে চিন্তা করেন তবে এটি স্পষ্ট হওয়া উচিত।

  • পলি = বহু: বহুভুজ = বহুতল, পলিস্টায়ারিন = অনেকগুলি স্টেরেন (ক) , বহুভোজ = বহু ভাষা এবং আরও।
  • মরফ = পরিবর্তন বা রূপ: রূপচিকিত্সা = জৈবিক ফর্মের অধ্যয়ন, মরফিয়াস = স্বপ্নের গ্রীক দেবতা যে কোনও রূপ নিতে সক্ষম।

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

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

কিন্তু, সেই একই ভাবে, মত একটি বর্গ BigDecimalবা Rationalবা Imaginaryওই অপারেশন প্রদান করতে পারেন, যদিও তারা বিভিন্ন ধরনের তথ্য উপর কাজ করে।

ক্লাসিক উদাহরণ এটি Shapeবর্গ এবং সমস্ত শ্রেণি যা এর উত্তরাধিকারী হতে পারে (বর্গক্ষেত্র, বৃত্ত, ডডেকাহেড্রন, অনিয়মিত বহুভুজ, স্প্ল্যাট এবং অন্যান্য)।

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

শ্রেণিটিকে তার কোডের পাশাপাশি ডেটাগুলির জন্য দায়ী করে, আপনি পলিমারফিজম অর্জন করতে পারেন। এই উদাহরণে, প্রতিটি শ্রেণীর নিজস্ব Draw()ফাংশন থাকবে এবং ক্লায়েন্ট কোডটি কেবল এটি করতে পারে:

shape.Draw()

যে কোনও আকারের জন্য সঠিক আচরণ পেতে।

এটি কোডগুলি ডেটা থেকে আলাদা ছিল এমন কাজ করার পুরানো পদ্ধতির বিপরীতে, এবং আপনার যেমন drawSquare()এবং এর মতো ফাংশন থাকতে পারে drawCircle()

অবজেক্ট ওরিয়েন্টেশন, পলিমারফিজম এবং উত্তরাধিকার সবগুলিই নিবিড়ভাবে সম্পর্কিত ধারণা এবং সেগুলি জানার জন্য অতীব গুরুত্বপূর্ণ। আমার দীর্ঘ ক্যারিয়ারে অনেকগুলি "রৌপ্য বুলেট" রয়েছে যা মূলত স্ফীত হয়ে গেছে তবে ও ও দৃষ্টান্তটি একটি ভাল হিসাবে প্রমাণিত হয়েছে। এটি শিখুন, এটি বুঝতে পারবেন, এটি পছন্দ করুন - আপনি খুশি হবেন :-)


(ক) আমি প্রথমে এটি একটি রসিকতা হিসাবে লিখেছি তবে এটি সঠিক হিসাবে প্রমাণিত হয়েছিল এবং তাই মজাদার নয়। মনোমর স্টায়ারিন কার্বন এবং হাইড্রোজেন থেকে তৈরি হতে দেখা যায় , এবং পলিস্টায়ারিন এর গ্রুপগুলি থেকে তৈরি হয় ।C8H8(C8H8)n

সম্ভবত আমার বলা উচিত ছিল যে একটি পলিপ চিঠির অনেকগুলি উপস্থিতি ছিল pযদিও এখন, আমাকে রসিকতাটি ব্যাখ্যা করতে হয়েছিল, এমনকি এটি মজাদারও বলে মনে হয় না।

কখনও কখনও, আপনি পিছনে থাকাকালীন আপনার উচিত :-)


50
গ্রীক, লাতিন নয় :) ('y' এবং 'ph' হ'ল) এবং গ্রীক ভাষায়, 'মরফ-' কেবল 'আকৃতি' বা 'রূপ' - 'মরফ' এর জন্য ' চেঞ্জ শেপ' এর ইংরেজি অর্থ পরবর্তী বিকাশ
আকাশম

16
পলিমারফিজম ওওপির সাথে সম্পর্কিত নয়, তবে ওওপি বহুবর্ষের সাথে সম্পর্কিত কারণ এটি সহজাতভাবে এটি সমর্থন করে (এটি একটি শালীন ওওপি ভাষা ধরে) ass পলিমারফিজমের অন্যান্য উদাহরণগুলির জন্য এফপি দেখুন।
বিকল্প

9
এই 2 টি লাইন আমার জন্য কৌশলটি করেছে:Poly = many and Morph = change or form
জো স্মু

3
পলিপ পলিপ (ইউ) এর জন্য সংক্ষিপ্ত। এবং pous গ্রীক পা হয়। ;-)
ডার্ক

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

250

পলিমারফিজম হ'ল আপনি যখন কোনও বস্তুর কোনও জিনিসের জেনেরিক সংস্করণ হিসাবে বিবেচনা করতে পারেন তবে আপনি যখন এটি অ্যাক্সেস করেন তখন কোডটি কোন সঠিক টাইপটি তা নির্ধারণ করে এবং সম্পর্কিত কোডটি কল করে।

এখানে সি # তে একটি উদাহরণ রয়েছে। কনসোল অ্যাপ্লিকেশনটির মধ্যে চারটি ক্লাস তৈরি করুন:

public abstract class Vehicle
{
    public abstract int Wheels;
}

public class Bicycle : Vehicle
{
    public override int Wheels()
    {
        return 2;
    }
}

public class Car : Vehicle
{
    public override int Wheels()
    {
        return 4;
    }
}

public class Truck : Vehicle
{
    public override int Wheels()
    {
        return 18;
    }
}

কনসোল অ্যাপ্লিকেশনটির জন্য মডিউলটির মূল () তে এখন নিম্নলিখিতটি তৈরি করুন:

public void Main()
{
    List<Vehicle> vehicles = new List<Vehicle>();

    vehicles.Add(new Bicycle());
    vehicles.Add(new Car());
    vehicles.Add(new Truck());

    foreach (Vehicle v in vehicles)
    {
        Console.WriteLine(
            string.Format("A {0} has {1} wheels.",
                v.GetType().Name, v.Wheels));
    }
}

এই উদাহরণে, আমরা বেস শ্রেণীর যানবাহনের একটি তালিকা তৈরি করি, যা এর প্রতিটি উপ-শ্রেণীর কয়টি চাকা রয়েছে তা সম্পর্কে জানেন না, তবে জানেন যে প্রতিটি উপ-শ্রেণীর কত চাকা রয়েছে তা জানার জন্য দায়বদ্ধ।

তারপরে আমরা তালিকায় একটি সাইকেল, গাড়ি এবং ট্রাক যুক্ত করি।

এরপরে, আমরা তালিকার প্রতিটি যানবাহনটি লুপ করতে পারি এবং সেগুলির সাথে সমস্তরূপে চিকিত্সা করতে পারি, তবে আমরা যখন প্রতিটি যানবাহনের 'চাকা'র সম্পত্তি অ্যাক্সেস করি তখন যানবাহন শ্রেণি সংশ্লিষ্ট কোডটি কার্যকর সাব-ক্লাসে প্রেরণ করে।

এই কোডটি বহুকোষী হিসাবে বলা হয়, যেহেতু কার্যকর কোডটি কার্যকর হয় তা রানটাইম সময়ে উপ-শ্রেণীর দ্বারা নির্ধারিত হয়।

আমি এই আপনি যে সাহায্য করে আশা করি।


6
আমি মনে করি এটি স্পষ্টভাবে প্যারেন্ট ইন্টারফেসটি দেখানোর জন্য একটি খুব ভাল উদাহরণ, এবং অবজেক্টটি ততক্ষণ না হয় যতক্ষণ না কংক্রিট সংস্করণ প্রয়োজন হয়, অর্থাৎ গাড়ি বনাম গাড়ি
তারযুক্ত00

1
আমি এটি স্পষ্ট উদাহরণ হিসাবে বলতে পারি, আপনি যদি পিএইচপি প্রোগ্রামার হন তবে এই লিঙ্কটি FIRST পর্যালোচনা করা আরও সহজ হতে পারে, এবং তারপরেও এটির
অলিভার উইলিয়ামস

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

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

195

পিএইচপি-তে পলিমারফিজম বোঝা এবং প্রয়োগ করা থেকে , ধন্যবাদ স্টিভ গুইডিটি।

পলিমারফিজম একটি খুব সাধারণ ধারণার জন্য দীর্ঘ শব্দ।

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

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

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


10
বোতাম সাদৃশ্য বিমূর্তকরণ ধারণার সাথে আরও সম্পর্কিত নয়?
thewpfguy

6
আসল উত্স: কোড. tutsplus.com/tutorials/…
কেউ 14

8
@Mantriur এই প্রকৃতপক্ষে সবকিছু চুরি করা হয়, এবং আমরা যে বিরুদ্ধে নিয়ম আছে: stackoverflow.com/help/referencing কিন্তু এখন তার স্কোর এবং সত্য যে পুরনো পোস্ট উত্তর মুছে ফেলার উপর প্রতিনিধির ক্ষতি থেকে ব্যতিক্রম হয় দেওয়া আমি নিশ্চিত যদি এটা মুছে ফেলার নই এখন সরাসরি কিছু উন্নতি করবে। পরবর্তী সর্বোত্তম বিকল্পটি হ'ল ব্যবহারকারীর পক্ষ থেকে অ্যাট্রিবিউশনে সম্পাদনা করা, যদিও আমি দৃ strongly়ভাবে বিশ্বাস করি যে ব্যবহারকারীরা নিজের উত্তরগুলিতে উত্স উদ্ধৃত করার জন্য দায়বদ্ধ।
বোল্টক্লক

1
আমি বিশ্বাস করি যে এটি বহন করা ভুল নয় যে ক্লিম এবং / বা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের জন্য পলিমারফিজম নির্দিষ্ট। আমি মনে করি যে এই উত্তরটি যা বলছে তা হ'ল সাব টাইপিং (এটি সাবটাইপ পলিমারফিজম বা অন্তর্ভুক্তি বহুমুখ হিসাবে পরিচিত)।
জেদীশুয়াগুই

64

যদি কেউ এই লোকদের CUT বলে

  1. শল্য চিকিৎসক
  2. হেয়ার স্টাইলিস্ট
  3. অভিনেতা

কি হবে?

  • সার্জন একটি চিরা তৈরি শুরু করবে।
  • হেয়ার স্টাইলিস্ট কারও চুল কাটা শুরু করত।
  • অভিনেতা হঠাৎ করেই বর্তমান দৃশ্যের বাইরে অভিনয় পরিচালনা বন্ধ করে দিতেন পরিচালক নির্দেশনার অপেক্ষায়।

সুতরাং উপরোক্ত উপস্থাপনাটি ওওপিতে বহুমুখিতা (একই নাম, ভিন্ন আচরণ) কী তা দেখায়।

আপনি যদি কোনও সাক্ষাত্কারের জন্য যাচ্ছেন এবং সাক্ষাত্কারকারীর কাছে আমরা যে ঘরে বসে আছি সেই একই কক্ষে পলিমারফিজমের জন্য একটি জীবন্ত উদাহরণ বলতে / বলার জন্য বলে,

উত্তর - ডোর / উইন্ডোজ

ভাবছি কিভাবে?

ডোর / উইন্ডোর মাধ্যমে - কোনও ব্যক্তি আসতে পারে, বাতাস আসতে পারে, আলো আসতে পারে, বৃষ্টি আসতে পারে ইত্যাদি etc.

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


5
আমি এটি একটি দুর্দান্ত উদাহরণ বলে মনে করি না কারণ এটি অনভিজ্ঞ লোকদের ভাবতে পারে যে যদি দুটি শ্রেণির কোনও .foo()পদ্ধতি থাকে তবে তাদের একটি সাধারণ ইন্টারফেস ভাগ করা উচিত। তবে এটি সত্য নয় এবং ভুল বিমূর্তির দিকে পরিচালিত করে। একটি ইন্টারফেসের একটি ভূমিকা যা খেলতে হবে তার সংজ্ঞা দেওয়া উচিত , যার অনেকগুলি বিভিন্ন বাস্তবায়ন থাকতে পারে, তবে সমস্তই একই ইনপুট সেট থেকে টানতে পারে এবং একই সেট আউটপুট থেকে কিছু ফেরত দেয়। x.cut(...)সার্জন, স্টাইলিস্ট বা অভিনেতার জন্য একটি ইনপুট একই নয় এবং আউটপুটও নয়।
ম্যাট ক্লিন

37

সাদৃশ্য দ্বারা সহজ ব্যাখ্যা

মার্কিন যুক্তরাষ্ট্রের রাষ্ট্রপতি পলিমারফিজম নিয়োগ করেন। কিভাবে? ঠিক আছে, তাঁর অনেক পরামর্শদাতা রয়েছেন:

  1. সামরিক উপদেষ্টা
  2. আইনী পরামর্শদাতা
  3. পারমাণবিক পদার্থবিদ (পরামর্শদাতা)
  4. চিকিত্সক পরামর্শদাতা
  5. ইত্যাদি ইত্যাদি

প্রত্যেককে কেবল একটি জিনিসের জন্য দায়ী করা উচিত: উদাহরণ:

রাষ্ট্রপতি দস্তা লেপ, বা কোয়ান্টাম পদার্থবিজ্ঞানের বিশেষজ্ঞ নন। তিনি অনেক কিছুই জানেন না - তবে তিনি কেবল একটি জিনিস জানেন: কীভাবে দেশ চালাবেন।

কোড সহ এটি একই রকম: উদ্বেগ এবং দায়িত্বগুলি প্রাসঙ্গিক শ্রেণি / লোকদের পৃথক করা উচিত। অন্যথায় আপনি রাষ্ট্রপতি বিশ্বের আক্ষরিক সব কিছু জানতে চান - পুরো উইকিপিডিয়া। আপনার কোডের একটি শ্রেণিতে পুরো উইকিপিডিয়া রয়েছে তা কল্পনা করুন: এটি বজায় রাখা দুঃস্বপ্ন হবে।

রাষ্ট্রপতির কাছে এই সমস্ত নির্দিষ্ট বিষয়গুলি জানার জন্য কেন এটি খারাপ ধারণা?

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

উদাহরণস্বরূপ, যদি ইপিএ দূষণ আইন পরিবর্তন করে তবে তা যখন ঘটে: আপনার ইপিএ শ্রেণি এবং রাষ্ট্রপতি শ্রেণিতেও পরিবর্তন আনতে হবে । একের চেয়ে দুটি জায়গায় কোড পরিবর্তন করা বিপজ্জনক হতে পারে - কারণ এটি বজায় রাখা আরও শক্ত er

একটি ভাল পদ্ধতির আছে কি?

আরও ভাল পদ্ধতি রয়েছে: রাষ্ট্রপতির কোনও কিছুর সুনির্দিষ্ট বিবরণ জানা দরকার না - বিশেষত সেই কাজগুলি করার দায়িত্ব দেওয়া লোকদের কাছ থেকে তিনি সেরা পরামর্শের দাবি করতে পারেন।

তিনি দেশ পরিচালনার জন্য একটি বহুমুখী পদ্ধতির ব্যবহার করতে পারেন।

উদাহরণ - পলিমারফিক পদ্ধতি ব্যবহারের:

সমস্ত রাষ্ট্রপতি লোককে তাঁর পরামর্শ দেওয়ার জন্য বলছেন - এবং তিনি বাস্তবে বাস্তবে যা করেন - এবং এটিই একজন ভাল রাষ্ট্রপতির করা উচিত। তার পরামর্শদাতারা সকলেই আলাদা আলাদা প্রতিক্রিয়া জানান, তবে তারা সকলেই জানেন যে রাষ্ট্রপতির অর্থ কী: উপদেশ ()। তিনি তাঁর অফিসে কয়েকশ লোককে স্ট্রিমিংয়ে নিয়ে এসেছেন। আসলে তারা কে তা বিবেচ্য নয়। সমস্ত রাষ্ট্রপতি জানেন যে তিনি যখন তাদের "পরামর্শ" দিতে বলেন তারা সেই অনুযায়ী কীভাবে প্রতিক্রিয়া জানাতে হয় :

public class MisterPresident
{
    public void RunTheCountry()
    {
        // assume the Petraeus and Condi classes etc are instantiated.
        petraeus.Advise(); // # Petraeus says send 100,000 troops to Fallujah
        condolezza.Advise(); // # she says negotiate trade deal with Iran
        healthOfficials.Advise(); // # they say we need to spend $50 billion on ObamaCare
    }
}

এই পদ্ধতির মাধ্যমে রাষ্ট্রপতি সামরিক জিনিস, বা স্বাস্থ্যসেবা বা আন্তর্জাতিক কূটনীতি সম্পর্কে কিছুই না জেনে আক্ষরিকভাবে দেশ পরিচালনা করতে পারবেন: বিশদটি বিশেষজ্ঞদের কাছে রেখে দেওয়া হয়েছে। রাষ্ট্রপতির একমাত্র জিনিসটি জানতে হবে এটি হ'ল: "পরামর্শ ()"।

আপনি কী চান না:

public class MisterPresident
{
    public void RunTheCountry()
    {
        // people walk into the Presidents office and he tells them what to do
        // depending on who they are.

        // Fallujah Advice - Mr Prez tells his military exactly what to do.
        petraeus.IncreaseTroopNumbers();
        petraeus.ImproveSecurity();
        petraeus.PayContractors();

        // Condi diplomacy advice - Prez tells Condi how to negotiate

        condi.StallNegotiations();
        condi.LowBallFigure();
        condi.FireDemocraticallyElectedIraqiLeaderBecauseIDontLikeHim();

        // Health care

        healthOfficial.IncreasePremiums();
        healthOfficial.AddPreexistingConditions();
    }
}

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

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

এটি কীভাবে বাস্তবে প্রয়োগ করা হয় - বেস ক্লাস বা একটি সাধারণ ইন্টারফেসের মাধ্যমে

এটি কার্যকরভাবে সংক্ষেপে, বহুবর্ষবাদ। ঠিক কীভাবে এটি করা হয়? "একটি সাধারণ ইন্টারফেস বাস্তবায়নের মাধ্যমে" বা বেস ক্লাস (উত্তরাধিকার) ব্যবহার করে - উপরের উত্তরগুলি দেখুন যা বিস্তারিতভাবে এটি স্পষ্টভাবে দেখেছে। (এই ধারণাটি আরও পরিষ্কারভাবে বোঝার জন্য আপনাকে ইন্টারফেসটি কী তা জানতে হবে এবং উত্তরাধিকার কী তা আপনাকে বুঝতে হবে that এটি ছাড়া আপনার পক্ষে লড়াই করতে পারে))

অন্য কথায়, পেট্রিয়াস, কন্ডি এবং হেলথঅফিশিয়ালগুলি এমন সমস্ত শ্রেণি হবে যা "ইন্টারফেস প্রয়োগ করে" - আসুন একে বলা যাক IAdvisor ইন্টারফেস যা মাত্র এক পদ্ধতি রয়েছে: Advise()। তবে এখন আমরা সুনির্দিষ্ট হয়ে উঠছি।

এটি আদর্শ হবে

    public class MisterPresident
    {
            // You can pass in any advisor: Condi, HealthOfficials,
            //  Petraeus etc. The president has no idea who it will 
            // be. But he does know that he can ask them to "advise" 
            // and that's all Mr Prez cares for.

        public void RunTheCountry(IAdvisor governmentOfficer)
        {             
            governmentOfficer.Advise();              
        }
    }


    public class USA
    {
        MisterPresident president;

        public USA(MisterPresident president)
        {
            this.president = president;
        }

        public void ImplementPolicy()
        {
            IAdvisor governmentOfficer = getAdvisor(); // Returns an advisor: could be condi, or petraus etc.
            president.RunTheCountry(governmentOfficer);
        }
    }

সারসংক্ষেপ

আপনার সত্যিকারের যা জানা দরকার তা হ'ল:

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

আমি সত্যিই আশা করি এটি আপনাকে সহায়তা করবে। আপনি কিছু বুঝতে না পারলে একটি মন্তব্য পোস্ট করুন এবং আমি আবার চেষ্টা করব।


4
চমত্কার উদাহরণ! ধন্যবাদ।
ইমান সেদিঘি

1
খুব আকর্ষণীয় উপমা। ধন্যবাদ.
থানাহটাং

1
@ টিটিটি কারণ (১) প্রতিবার আপনার কাছে নতুন উপদেষ্টা থাকলে আপনাকে রাষ্ট্রপতি বর্গ পরিবর্তন করতে হবে - আপনি এক্স 2 পরিবর্তন করতে চান না। শুধু একটি. (২) দ্বিতীয়ত, যদি আপনাকে কোনও বিদ্যমান উপদেষ্টা পরিবর্তন করতে হয়, তবে আপনাকে ফিরে যেতে হবে এবং রাষ্ট্রপতি শ্রেণিতে এই তিনটি কলের মধ্যে একটি পরিবর্তন করতে হবে - আপনি কেবল সত্যই দুটি পরিবর্তন করতে চান না। (3) আপনার যদি তিনটি পৃথক কল থাকে তবে আপনাকে রাষ্ট্রপতি বর্গের মধ্যে জিজ্ঞাসা করতে হবে: if healthAdvisor? then do this:এবং if petraus then do that etc.এই প্যাটার্নটির পুনরাবৃত্তি করা দরকার এবং এটি অপ্রয়োজনীয় এবং জটিল। উপরে সম্পাদনা দেখুন।
বিকেএসপুরগাঁও

1
@ টিটিটি হ্যাঁ আপনি ঠিক বলেছেন। তবে ধীরে ধীরে আমার পাঠকদের কাছে ধারণাটি প্রবর্তন করতে হবে অন্যথায় তারা বুঝতে পারবেন না। আমি আরও পরিবর্তন যুক্ত করেছি। অনুগ্রহ করে স্পষ্টতা প্রয়োজন কিনা পরামর্শ দিন
বিকেএসপুরজান

1
@ টিটিটি বেস ক্লাস বনাম ইন্টারফেস এমন একটি ডিজাইনের সিদ্ধান্ত প্রোগ্রামার যা পলিমার্পিজম করার সময় করতে হয়। : আরো বিস্তারিত জানার জন্য এখানে দেখতে stackoverflow.com/questions/56867/interface-vs-base-class
BKSpurgeon

24

পলিমারফিজম হ'ল এক শ্রেণীর অবজেক্টের সাথে চিকিত্সা করার ক্ষমতা যেমন এটি পিতামাতার শ্রেণী।

উদাহরণস্বরূপ, ধরা যাক অ্যানিমাল নামে একটি শ্রেণি আছে, এবং কুকুর নামে একটি শ্রেণি রয়েছে যা প্রাণীর কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। পলিমারফিজম হ'ল যে কোনও কুকুর অবজেক্টকে এনিমেল অবজেক্টের মতো আচরণ করার ক্ষমতা:

Dog* dog = new Dog;
Animal* animal = dog;

আমি অবাক হয়েছি যে এটি কীভাবে (জনপ্রিয়) ব্যাখ্যাটির সাথে সম্পর্কিত যা অজয় ​​প্যাটেল দিয়েছেনclasses have different functionality while sharing a common interface
বর্নটোকোড

1
@ বার্নটোকোড পিতামাত্ত শ্রেণিটি / সাধারণ ইন্টারফেসটি সরবরাহ করে।
গ্রোকম্যান

1
পলিমারফিজমে সাব টাইপিংয়ের প্রয়োজন হয় না।
শান লুটিন

22

পলিমরফিজ্ম:

এটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের ধারণা ident অভিন্ন বার্তাগুলিতে প্রত্যেকে নিজস্ব উপায়ে প্রতিক্রিয়া জানাতে বিভিন্ন অবজেক্টের দক্ষতাকে পলিমারফিজম বলে।

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

  • সি কাঠামোর ক্ষেত্রগুলি যেমন সুরক্ষিত নেমস্পেসে থাকে তেমনি কোনও বস্তুর উদাহরণ ভেরিয়েবলগুলিও থাকে।

  • পদ্ধতির নামগুলিও সুরক্ষিত। সি ফাংশনের নামের মতো নয়, পদ্ধতির নামগুলি বিশ্বব্যাপী প্রতীক নয়। এক শ্রেণীর কোনও পদ্ধতির নাম অন্য শ্রেণির পদ্ধতির নামের সাথে বিরোধ করতে পারে না; দুটি খুব পৃথক ক্লাস একই নামকরণ পদ্ধতি প্রয়োগ করতে পারে।

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

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

উদাহরণ:

উদাহরণ -১: পাইথন ২.x এ লিখিত একটি সাধারণ উদাহরণ ।

class Animal:
    def __init__(self, name):    # Constructor of the class
        self.name = name
    def talk(self):              # Abstract method, defined by convention only
        raise NotImplementedError("Subclass must implement abstract method")

class Cat(Animal):
    def talk(self):
        return 'Meow!'

class Dog(Animal):
    def talk(self):
        return 'Woof! Woof!'

animals = [Cat('Missy'),
           Dog('Lassie')]

for animal in animals:
    print animal.name + ': ' + animal.talk()

উদাহরণ -২: পলিমারফিজমটি জাভাতে পদ্ধতি ওভারলোডিং এবং মেথড ওভাররাইডিং ধারণাগুলি ব্যবহার করে প্রয়োগ করা হয় ।

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

তবে প্রত্যেকের নিজস্ব চলতি আচরণের সাথে যুক্ত তাদের নিজস্ব উন্নত বৈশিষ্ট্য এবং আরও উন্নত প্রযুক্তি রয়েছে।

এখন আসুন একটি বেসিক টাইপ কার তৈরি করি

Car.java

public class Car {

    int price;
    String name;
    String color;

    public void move(){
    System.out.println("Basic Car move");
    }

}

আসুন আমরা ফোর্ড কার উদাহরণটি বাস্তবায়ন করি।

ফোর্ড তার সমস্ত সদস্যের (সম্পত্তি এবং পদ্ধতি) উত্তরাধিকারী হওয়ার জন্য ধরণটি প্রসারিত করে।

Ford.java

public class Ford extends Car{
  public void move(){
    System.out.println("Moving with V engine");
  }
}

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

Honda.java

public class Honda extends Car{
  public void move(){
    System.out.println("Move with i-VTEC engine");
  }
}

ফোর্ডের মতোই, হোন্ডাও গাড়ীর প্রকারটি প্রসারিত করে এবং সরানোর পদ্ধতিটি নিজস্ব উপায়ে প্রয়োগ করে।

পলিমারফিজম সক্ষম করার জন্য মেথড ওভাররাইডিং একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। মেথড ওভাররাইডিং ব্যবহার করে সাব-প্রকারগুলি উত্তরাধিকারের মাধ্যমে যে পদ্ধতিগুলি উপলব্ধ তা কার্যকর করতে পারে।

PolymorphismExample.java

public class PolymorphismExample {
  public static void main(String[] args) {
    Car car = new Car();
    Car f = new Ford();
    Car h = new Honda();

    car.move();
    f.move();
    h.move();

  }
}

পলিমারফিজমের উদাহরণ আউটপুট:

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

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

সুতরাং, PolymorphismExample এ রেফারেন্স কারের জন্য, এফ এবং এইচ, এইচ পদ্ধতিটি কার ধরণের থেকে বিদ্যমান। সুতরাং, সংকলকটি কোনও সমস্যা ছাড়াই সংকলন প্রক্রিয়াটি পাস করে।

রান রান সময় কার্যকর করার ক্ষেত্রে, ভার্চুয়াল মেশিনটি সাব-টাইপযুক্ত অবজেক্টগুলির জন্য পদ্ধতিগুলি আহ্বান করে। সুতরাং, পদ্ধতি সরানো () তাদের নিজ নিজ প্রয়োগগুলি থেকে আহবান করা হয়েছে।

সুতরাং, সমস্ত বস্তু গাড়ি টাইপযুক্ত, তবে রান সময় চলাকালীন, সঞ্চালনটি সেই বস্তুর উপর নির্ভর করে যেখানে ডাকা হয়। একে পলিমারফিজম বলে।


ওভারলোডিং ধারণার উত্তরাধিকার এবং পলিমারফিজমের সাথে কোনও সম্পর্ক নেই।
srk

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

12

সাধারণত এটি টাইপ এ-এর কোনও অবজেক্টের জন্য বি টাইপ বিয়ের কোনও বস্তুর মতো আচরণ করার ক্ষমতা বোঝায়। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে এটি সাধারণত উত্তরাধিকার দ্বারা অর্জন করা হয়। আরও কিছু পড়ার জন্য কিছু উইকিপিডিয়া লিঙ্ক:

সম্পাদনা: স্থির ভাঙা লিঙ্কগুলি।


10
"টাইপ এ-এর কোনও অবজেক্টের জন্য বি টাইপের বিয়ের একটি বস্তুর মতো আচরণ করার ক্ষমতা" - এটি সঠিক সংজ্ঞা নয়। আমি এটা টাইপ বি একটি অবজেক্ট মত গ্রুপ এ একটি অবজেক্ট চিকিত্সা ক্ষমতা মত আরো বলতে হবে
Artem বার্জার

হ্যাঁ. হতে পারে এটি একটি ভাল ফ্রেসিং।
জেস্পেআর

সম্পূর্ণতার জন্য, অনেক ভাষা হাঁসের টাইপিংয়ের মাধ্যমে বহুমুখী রূপ প্রয়োগ করে, যেমন পাইথন।
ইলিয়া n।

আমি অবাক হয়েছি যে এটি কীভাবে (জনপ্রিয়) ব্যাখ্যাটির সাথে সম্পর্কিত যা অজয় ​​প্যাটেল দিয়েছেনclasses have different functionality while sharing a common interface
বর্নটোকোড

9

পলিমারফিজমটি হ'ল:

class Cup {
   int capacity
}

class TeaCup : Cup {
   string flavour
}

class CoffeeCup : Cup {
   string brand
}

Cup c = new CoffeeCup();

public int measure(Cup c) {
    return c.capacity
}

আপনি একটি নির্দিষ্ট উদাহরণের পরিবর্তে কেবল একটি কাপ পাস করতে পারেন। এটি সাধারণভাবে এইডস দেয় কারণ আপনাকে প্রতিটি কাপের জন্য প্রতি একটি নির্দিষ্ট পরিমাপ () উদাহরণ সরবরাহ করতে হবে না


2
এটি বিশেষত সাব টাইপ পলিমারফিজম।
শান লুটিন

@ ভিঙ্কো-বৃসালোভিক: গ্রামীণ আমেরিকার মতো সফটওয়্যার বিকাশ কী?
টিটিটি

8

আমি জানি এটি অনেক ভাল উত্তর সহ একটি পুরানো প্রশ্ন তবে আমি একটি বাক্যটির উত্তর অন্তর্ভুক্ত করতে চাই:

উদ্ভূত প্রকারের সাথে চিকিত্সা করা যেমন এটির বেস টাইপ।

উপরে প্রচুর উদাহরণ রয়েছে যা এটি কার্যকরভাবে দেখায়, তবে আমি মনে করি এটি একটি ভাল সংক্ষিপ্ত উত্তর।


2
এটি সাব টাইপিং, যা একধরণের পলিমারফিজম।
শান লুটিন

@ শাঁললটিন আপনি কি অন্য ধরণের বহুবর্ষ সম্পর্কে আরও জানতে কোন সংস্থান সম্পর্কে আমাকে নির্দেশ করতে পারেন?
আবে মিজস্লার

"সাব-টাইপ পলিমॉर्फিজম" এর সাথে যুক্ত "অ্যাডহক পলিমারফিজম" এবং "প্যারামিটারিক পলিমারফিজম"।
শান লুটিন

8

(আমি সম্পূর্ণ আলাদা কিছু নিয়ে অন্য আর্টিকেলটি ব্রাউজ করছিলাম .. এবং পলিমারফিজমটি পপ আপ হয়ে গেছে ... এখন আমি ভেবেছিলাম যে আমি জানি যে পলিমারফিজম কী ... তবে দৃশ্যত এই সুন্দর উপায়ে ব্যাখ্যা করা হয়নি .. কোথাও এটি লিখতে চেয়েছি .. আরও ভাল এখনও ভাগ করে নেবে ...)

http://www.eioba.com/a/1htn/how-i-explained-rest-to-my-wife

এই অংশ থেকে পড়ুন:

..... বহুমুখীতা। এটি বলার এক কৌতুকপূর্ণ উপায় যে বিভিন্ন বিশেষ্যগুলির ক্ষেত্রে তাদের একই ক্রিয়া প্রয়োগ করা যেতে পারে।


5

সাধারণভাবে বলতে গেলে, এটি একই বা অতিপরিচয়যুক্ত অনুরূপ এপিআই ব্যবহার করে বিভিন্ন ধরণের অবজেক্টের ইন্টারফেস করার ক্ষমতা। বিভিন্ন রূপ রয়েছে:

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

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

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


4

বহুবচন শব্দটি এসেছে:

বহু = বহু

রূপচর্চা = পরিবর্তন করার ক্ষমতা

প্রোগ্রামিংয়ে, পলিমারফিজম এমন একটি "কৌশল" যা আপনাকে কোনও জিনিসের একাধিক ধরণের জিনিস হিসাবে "চেহারা" দেয়। এই ক্ষেত্রে:

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

নীচের লাইনটি, বিভিন্ন "কোণ" থেকে একই বস্তুর দিকে "সন্ধান করা" আপনাকে বিভিন্ন "দৃষ্টিভঙ্গি" দিতে পারে (অর্থাত্ বিভিন্ন বৈশিষ্ট্য বা পদ্ধতি)

সুতরাং এই কৌশলটি আপনাকে এমন স্টাফ তৈরি করতে দেয় যা বিভিন্ন কোণ থেকে "দেখানো" যেতে পারে।

আমরা পলিমারফিজম কেন ব্যবহার করি? শুরুর জন্য ... বিমূর্ততা এই মুহুর্তে এটি যথেষ্ট তথ্য হওয়া উচিত :)


3

একটি উপমা ব্যবহার করা যাক। প্রদত্ত সংগীত স্ক্রিপ্টের জন্য প্রতিটি সংগীত যা এটি বাজায় তা ব্যাখ্যায় তার নিজস্ব স্পর্শ দেয়।

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

আপনি যদি বাদ্যযন্ত্রের শ্রোতা হন তবে আপনার কাছে স্ক্রিপ্টের একটি উল্লেখ রয়েছে যেমন বাচের 'ফুগা এবং টোকাটা' এবং এটি সম্পাদনকারী প্রতিটি সংগীতশিল্পী তার নিজস্ব উপায়ে বহুবৈচিত্র্য করেন।

এটি সম্ভাব্য নকশার (জাভাতে) কেবল উদাহরণ example

public interface Musician {
  public void play(Work work);
}

public interface Work {
  public String getScript();
}

public class FugaAndToccata implements Work {
  public String getScript() {
    return Bach.getFugaAndToccataScript();
  }
}

public class AnnHalloway implements Musician {
  public void play(Work work) {
    // plays in her own style, strict, disciplined
    String script = work.getScript()
  }
}

public class VictorBorga implements Musician {
  public void play(Work work) {
    // goofing while playing with superb style
    String script = work.getScript()
  }
}

public class Listener {
  public void main(String[] args) {
    Musician musician;
    if (args!=null && args.length > 0 && args[0].equals("C")) {
      musician = new AnnHalloway();
    } else {
      musician = new TerryGilliam();
    }
    musician.play(new FugaAndToccata());
}

1
AnnHallowayএবং VictorBorgaক্লাসের পরিবর্তে তাদের বস্তু হওয়া উচিত বলে মনে করুন - উদাহরণস্বরূপ আপনার উদাহরণটি আরও ভালভাবে পড়তে পারে। public class Pianist implements Musicianএবং victorBorge = new Pianist();ইত্যাদি
প্রিজেমেক ডি

3

আমি অন্য প্রশ্নের জন্য বহুবর্ষের উচ্চ পর্যায়ের ওভারভিউ সরবরাহ করেছি:

সি ++ তে পলিমারফিজম

আশা করি এটা সাহায্য করবে. একটি নিষ্কাশন ...

... এটি এর জন্য একটি সাধারণ পরীক্ষা এবং [বহুবিজ্ঞান] এর সংজ্ঞা থেকে শুরু করতে সহায়তা করে। কোডটি বিবেচনা করুন:

Type1 x;
Type2 y;

f(x);
f(y);

এখানে f()কিছু অপারেশন করা এবং মান xএবং yইনপুট হিসাবে দেওয়া হচ্ছে । বহুমুখী হতে, f()কমপক্ষে দুটি স্বতন্ত্র ধরণের (যেমন intএবং double) মানগুলির সাথে পরিচালনা করতে সক্ষম হতে হবে , টাইপ-উপযুক্ত কোড সন্ধান এবং সম্পাদন করতে হবে।

( সি ++ তে পলিমারফিজমে অবিরত )


3

পলিমারফিজম হ'ল বস্তুর একটি ক্ষমতা যা বিভিন্ন আকারে নেওয়া যেতে পারে। উদাহরণস্বরূপ মানব শ্রেণিতে একজন মানুষ বিভিন্ন রূপে অভিনয় করতে পারে যখন আমরা সম্পর্কের কথা বলি। প্রাক্তন: একজন পুরুষ তার ছেলের বাবা এবং তিনি তার স্ত্রীর স্বামী এবং তিনি তাঁর ছাত্রদের কাছে শিক্ষক is


3

পলিমॉারফিজম হ'ল একটি বস্তুর বিভিন্ন রূপ ধারণ করার ক্ষমতা। ওওপিতে পলিমারফিজমের সর্বাধিক প্রচলিত ব্যবহার তখন ঘটে যখন পিতা-মাতার শ্রেণি রেফারেন্সটি শিশু শ্রেণীর অবজেক্টের জন্য উল্লেখ করা হয়। জাভাতে লেখা এই উদাহরণে আমাদের তিন ধরণের যানবাহন রয়েছে। আমরা তিনটি পৃথক বস্তু তৈরি করি এবং তাদের চাকা পদ্ধতি চালানোর চেষ্টা করি:

public class PolymorphismExample {

    public static abstract class Vehicle
    {
        public int wheels(){
            return 0;
        }
    }

    public static class Bike extends Vehicle
    {
        @Override
        public int wheels()
        {
            return 2;
        }
    }

    public static class Car extends Vehicle
    {
        @Override
        public int wheels()
        {
            return 4;
        }
    }

    public static class Truck extends Vehicle
    {
        @Override
        public int wheels()
        {
            return 18;
        }
    }

    public static void main(String[] args)
    {
        Vehicle bike = new Bike();
        Vehicle car = new Car();
        Vehicle truck = new Truck();

        System.out.println("Bike has "+bike.wheels()+" wheels");
        System.out.println("Car has "+car.wheels()+" wheels");
        System.out.println("Truck has "+truck.wheels()+" wheels");
    }

}

ফলাফল হলো:

ফলাফল

আরও তথ্যের জন্য দয়া করে https://github.com/m-vahidalizadeh/java_advanced/blob/master/src/files/PolymorphismExample.java দেখুন । আমি আসা করি এটা সাহায্য করবে.


হ্যাঁ, তবে আপনি বহুবর্ষের উপকারিতা কী তা ব্যাখ্যা করেন নি। স্পষ্টতই একটি সংক্ষিপ্ত কোড রয়েছে, যেখানে আপনি যানবাহন শ্রেণিটি মুছবেন, এবং এটি এখনও কাজ করবে (অবশ্যই একটি পৃথক অবজেক্টের ঘোষণার সাথে)।
কর্নেলিয়াস

আমি ব্যাখ্যা করিনি, যেহেতু যে প্রশ্নটি জিজ্ঞাসা করেছিল সে সুবিধা সম্পর্কে জিজ্ঞাসা করে না। তিনি জিজ্ঞাসা করেছিলেন: "পলিমারফিজম কী, এটি কীসের জন্য এবং এটি কীভাবে ব্যবহৃত হয়?" কোড সম্পর্কে, আপনি যদি এটি আরও ভাল করতে পারেন তবে দয়া করে আপনার উত্তর পোস্ট করুন। সুতরাং, আমাদের সম্প্রদায় এটি ব্যবহার করতে পারে। আপনার মন্তব্যের জন্য ধন্যবাদ.
মোহাম্মদ

দুঃখিত, অসভ্য শব্দ বলতে চাননি, অন্যরাও এর ব্যাখ্যা দেয় না। অন্তত আপনি কোডটি টাইপ করতে বিরক্ত করেছিলেন। যাইহোক, তিনি জিজ্ঞাসা করলেন এটি কীসের জন্য, তবে এই পৃষ্ঠার উদাহরণগুলির মধ্যে কোনওটিই এর কী তা ব্যাখ্যা করে না। আপনারা সকলেই এই জাতীয় ফলাফলগুলি পাওয়ার জন্য একটি জটিল উপায় উপস্থাপন করেছেন: s28.postimg.org/jq8vl6031/Poly.jpg এবং কেউ কেন পলিমারফিজম ব্যবহার করতে চান, তার লাভ বা উদ্দেশ্য কী, কী কী হতে পারে না তা ব্যাখ্যা করার যত্ন নেননি এটি ব্যবহার না হলে করা হয়েছে? এই পৃষ্ঠায় আমি যা দেখছি তা হ'ল সিঁড়ি ব্যবহার করে আপনার অ্যাপার্টমেন্টে আরোহণের প্রস্তাব, এবং একটি লিফট নয় ..
কর্নেলিয়াস

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

2

পলিমারফিজম হ'ল প্রোগ্রামারের সেই একই নামের পদ্ধতিগুলি লেখার ক্ষমতা যা সেই সমস্ত বস্তুর প্রয়োজনের উপর নির্ভর করে বিভিন্ন ধরণের বস্তুর জন্য বিভিন্ন কাজ করে। উদাহরণস্বরূপ, আপনি যদি একটি ক্লাস নামে পরিচিত Fractionএবং একটি ক্লাস নামে বিকাশ করছিলেন তবে ComplexNumberএই উভয়ের মধ্যেই বলা একটি পদ্ধতি অন্তর্ভুক্ত থাকতে পারে display()তবে তাদের প্রত্যেকে সেই পদ্ধতিটি আলাদাভাবে প্রয়োগ করবে। পিএইচপি-তে, উদাহরণস্বরূপ, আপনি এটি এর মতো প্রয়োগ করতে পারেন:

//  Class definitions

class Fraction
{
    public $numerator;
    public $denominator;

    public function __construct($n, $d)
    {
        //  In real life, you'd do some type checking, making sure $d != 0, etc.
        $this->numerator = $n;
        $this->denominator = $d;
    }

    public function display()
    {
        echo $this->numerator . '/' . $this->denominator;
    }
}

class ComplexNumber
{
    public $real;
    public $imaginary;

    public function __construct($a, $b)
    {
        $this->real = $a;
        $this->imaginary = $b;
    }

    public function display()
    {
        echo $this->real . '+' . $this->imaginary . 'i';
    }
}


//  Main program

$fraction = new Fraction(1, 2);
$complex = new ComplexNumber(1, 2);

echo 'This is a fraction: '
$fraction->display();
echo "\n";

echo 'This is a complex number: '
$complex->display();
echo "\n";

আউটপুট:

This is a fraction: 1/2
This is a complex number: 1 + 2i

অন্যান্য উত্তরগুলির মধ্যে কিছুটি বোঝাচ্ছে যে বহুত্ববাদটি কেবল উত্তরাধিকারের সাথে মিলিতভাবে ব্যবহৃত হয়; উদাহরণস্বরূপ, সম্ভবত Fractionএবং ComplexNumberউভয়ই এমন একটি বিমূর্ত শ্রেণি প্রয়োগ করে যার নাম Numberরয়েছে একটি পদ্ধতি display(), যা ভগ্নাংশ এবং কমপ্লেক্সনम्बर উভয়ই প্রয়োগ করতে বাধ্য ated তবে আপনার দরকার নেই উত্তরাধিকার পলিমরফিজম সুবিধা গ্রহণ করতে।

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

$userNumberChoice = $_GET['userNumberChoice'];

switch ($userNumberChoice) {
    case 'fraction':
        $userNumber = new Fraction(1, 2);
        break;
    case 'complex':
        $userNumber = new ComplexNumber(1, 2);
        break;
}

echo "The user's number is: ";
$userNumber->display();
echo "\n";

এই ক্ষেত্রে, উপযুক্ত display()পদ্ধতিটি কল করা হবে, যদিও ব্যবহারকারী কোনও ভগ্নাংশ বা জটিল সংখ্যা চয়ন করবে কিনা তা বিকাশকারী সময়ের আগেই জানতে পারে না।


2
এটি বহুবর্ষ নয়। এটি একই নামের পদ্ধতিযুক্ত দুটি শ্রেণি। তাদেরকে "ডিসপ্লেযোগ্য" বা একটি অনুরূপ কিছু বলে একটি বেস ক্লাস বা ইন্টারফেসের মাধ্যমে সংযুক্ত করার দরকার হবে এবং তারপরে অন্যান্য পদ্ধতিগুলি কেবল যত্ন নেবে যে বস্তুটি কমপ্লেক্স বা ভগ্নাংশের পরিবর্তে "প্রদর্শনযোগ্য" টাইপযুক্ত।
পোড

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

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

2

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


2

পলিমারফিজমের আক্ষরিক অর্থ, একাধিক আকার। (বা অনেকগুলি ফর্ম): বিভিন্ন শ্রেণি এবং একই নাম পদ্ধতি থেকে অবজেক্ট, তবে কর্মপ্রবাহগুলি ভিন্ন। একটি সাধারণ উদাহরণ হবে:

একজন ব্যক্তির এক্স বিবেচনা করুন।

তিনি কেবল একজন ব্যক্তি তবে তিনি যতগুলি অভিনয় করেন। আপনি জিজ্ঞাসা করতে পারেন কিভাবে:

তিনি তার মায়ের একটি পুত্র। তার বন্ধুদের বন্ধু। তার বোনের এক ভাই।


2

ওওপিতে পলিমারফিজম বলতে বোঝায় যে কোনও শ্রেণীর বিভিন্ন ধরণের থাকতে পারে, পলিমারফিজম প্রয়োগের একটি উপায় হ'ল উত্তরাধিকার।

উদাহরণস্বরূপ, শেপটি একটি ইন্টারফেস, এতে স্কোয়ার , সার্কেল , ডায়মন্ড সাব টাইপ রয়েছে। এখন আপনার একটি স্কোয়ার অবজেক্ট রয়েছে, আপনি স্কয়ারটি স্বয়ংক্রিয়ভাবে আকারে তুলতে পারবেন, কারণ স্কয়ারটি একটি শেপ। তবে আপনি যখন শেপকে স্কয়ারে ডাউন কাস্টিং করার চেষ্টা করবেন, আপনাকে অবশ্যই স্পষ্ট ধরণের কাস্টিং করতে হবে, কারণ আপনি শেপটিকে স্কোয়ার বলতে পারেন না, এটি বৃত্তও হতে পারে। সুতরাং আপনার কোডটি ম্যানুয়ালি কোডের মতো কোডের সাহায্যে তৈরি Square s = (Square)shapeকরতে হবে, যদি আকারটি বৃত্ত হয় তবে কী পাবেন java.lang.ClassCastException, কারণ বৃত্তটি স্কোয়ার নয়।


2

পলিমরফিজ্ম:

শ্রেণীর উদাহরণ অনুসারে পৃথক সম্পাদন, রেফারেন্স ভেরিয়েবলের ধরণ নয়।

একটি ইন্টারফেস টাইপ রেফারেন্স ভেরিয়েবল সেই ইন্টারফেসটি প্রয়োগ করে এমন কোনও শ্রেণীর উদাহরণকে উল্লেখ করতে পারে।


1

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

মনে রাখবেন না যে প্রতিটি শ্রেণি পৃথক ফাইলে সংরক্ষণ করতে হবে।

নীচের কোড বহুরূপীকরণের উদাহরণ দেয়:

সুপারক্লাস:

public class Parent {
    //Define things that all classes share
    String maidenName;
    String familyTree;

    //Give the top class a default method
    public void speak(){
         System.out.println("We are all Parents");
    }
}

পিতা, একটি সাবক্লাস:

public class Father extends Parent{
    //Can use maidenName and familyTree here
    String name="Joe";
    String called="dad";

    //Give the top class a default method
    public void speak(){
        System.out.println("I am "+name+", the father.");
    }
}

শিশু, অন্য একটি সাবক্লাস:

public class Child extends Father {
    //Can use maidenName, familyTree, called and name here

    //Give the top class a default method
    public void speak(){
        System.out.println("Hi "+called+". What are we going to do today?");
    }
}

মৃত্যুদন্ড কার্যকর করার পদ্ধতি, সূচনা করার জন্য পিতামাতার শ্রেণি উল্লেখ:

public class Parenting{
    public static void main(String[] args) {
        Parent parents = new Parent();
        Parent parent = new Father();
        Parent child = new Child();

        parents.speak();
        parent.speak();
        child.speak();
    }
}

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

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


2
মনে রাখবেন যে প্রতিটি সন্তানের পিতা-মাতা নন তাই এই কাঠামোটি ভুল। শীর্ষ শ্রেণীর শিশু হওয়া উচিত (যদি আপনি কেবল "ব্যক্তি" দিয়ে শুরু না করেন) যা আদম ব্যতীত সর্বদা সত্য হবে। আপনি তার পিতামাতা_দিকাকে নালায় সেট করতে পারেন যেহেতু মানব বুদ্ধির কোনও নির্মাণের সাথে স্রষ্টাকে সংজ্ঞায়িত করা যায় না।
ইয়াহোসেফ

1

পলিমারফিজম একই রুটিনকে (ফাংশন, পদ্ধতি) বিভিন্ন ধরণের কাজ করতে দেয়।

যেহেতু প্রচুর বিদ্যমান উত্তরগুলি পলিমারফিজমের সাথে সাবটিপিংয়ের বিবাদ করছে, তাই পলিমারফিজম বাস্তবায়নের জন্য এখানে তিনটি উপায় (সাব টাইপিং সহ) রয়েছে।

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

আরো দেখুন:

http://wiki.c2.com/?CategoryPolymorphism

https://en.wikipedia.org/wiki/Polymorphism_(computer_science)


0

অবজেক্ট ওরিয়েন্টেড ভাষায়, পলিমারফিজম একই ইন্টারফেসের মাধ্যমে বিভিন্ন ডেটা ধরণের চিকিত্সা এবং পরিচালনা করার অনুমতি দেয়। উদাহরণস্বরূপ, সি ++ তে উত্তরাধিকার বিবেচনা করুন: ক্লাস বি ক্লাস এ থেকে উদ্ভূত হয়েছে এ টাইপের একটি পয়েন্টার (ক্লাস এ টু পয়েন্টার) শ্রেণি 'এ' এবং 'বি' শ্রেণীর অবজেক্ট উভয়কে পরিচালনা করতে ব্যবহৃত হতে পারে Class


0

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


0

পলিমারফিজম আপনাকে একটি মডিউলকে অন্য কল করে তৈরি করার সক্ষমতা দেয় এবং নিয়ন্ত্রণের প্রবাহের পরিবর্তে নিয়ন্ত্রণ প্রবাহের বিপরীতে সংকলনের সময় নির্ভরতা পয়েন্ট থাকে।

পলিমারফিজম ব্যবহার করে, একটি উচ্চ স্তরের মডিউল নিম্ন-স্তরের মডিউলের উপর নির্ভর করে না। উভয় বিমূর্ততা উপর নির্ভর করে। এটি আমাদের নির্ভরতা বিপরীত নীতিটি প্রয়োগ করতে সহায়তা করে ( https://en.wikedia.org/wiki/D dependency_inversion_prصول )।

এখানেই আমি উপরের সংজ্ঞাটি পেয়েছি। ভিডিওতে প্রায় 50 মিনিট প্রশিক্ষক উপরোক্ত ব্যাখ্যা করেন। https://www.youtube.com/watch?v=TMuno5RZNeE


0

পলিমারফিজম কী?

পলিমারফিজম হ'ল ক্ষমতা:

  • বিশেষায়িত ধরণের পদ্ধতিটি কল করার সময় কেবল বিশেষায়িত ধরণের বিষয়টি জানতে পেরে বিশেষায়িত প্রকারের নজরে একটি ক্রিয়াকলাপটি চালান এবং জেনারালাইজড ধরণের নয়: এটি গতিশীল বহুবর্ষবাদ

  • সেভের নাম রয়েছে তবে বিভিন্ন পরামিতি রয়েছে এমন কয়েকটি পদ্ধতি নির্ধারণ করুন: এটি স্ট্যাটিক পলিমারফিজম

Ifতিহাসিক সংজ্ঞা এবং সবচেয়ে গুরুত্বপূর্ণ যদি প্রথম।

বহুমুখিতা কীসের জন্য ব্যবহৃত হয়?

এটি শ্রেণীর শ্রেণিবিন্যাসের দৃ strongly়-টাইপিত ধারাবাহিকতা তৈরি করতে এবং কিছু জাদুকরী করার অনুমতি দেয় জিনিস যেমন বিভিন্ন ধরণের বস্তুর তালিকা পরিচালনা না করে কেবল তাদের পিতামাতার ধরণের একটি, পাশাপাশি ডেটা বেঁধে দেওয়ার অনুমতি দেয়।

শক্ত এবং দুর্বল টাইপিং

নমুনা

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

public class Shape
{
 public virtual void Draw()
 {
   DoNothing();
 }
 public virtual void Draw(int timeout)
 {
   DoNothing();
 }
}

public class Point : Shape
{
 int X, Y;
 public override void Draw()
 {
   DrawThePoint();
 }
}

public class Line : Point
{
 int Xend, Yend;
 public override Draw()
 {
   DrawTheLine();
 }
}

public class Rectangle : Line
{
 public override Draw()
 {
   DrawTheRectangle();
 }
}

var shapes = new List<Shape> { new Point(0,0), new Line(0,0,10,10), new rectangle(50,50,100,100) };

foreach ( var shape in shapes )
  shape.Draw();

এখানে শেপ ক্লাস এবং শেপ.ড্রো () পদ্ধতিগুলি বিমূর্ত হিসাবে চিহ্নিত করা উচিত।

তারা বোঝার জন্য নয়।

Explaination

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

পলিমারফিজমের সাহায্যে, সিএলআর হ'ল ভার্চুয়াল টেবিল যা ব্যবহার করে আমরা যে বস্তুটি ব্যবহার করি তার প্রকৃত ধরণের অনুমান করতে সক্ষম হয় । সুতরাং এটি ভাল পদ্ধতিটি কল করে এবং এখানে শেপকে ড্রেস (ড্র) () শেপ করুন যদি বিন্দুটি বিন্দুটিকে কল করে ra ড্র ()। কোডটি আকারগুলি আঁকবে।

আরও পঠন

সি # - পলিমারফিজম (স্তর 1)

জাভাতে পলিমারফিজম (স্তর 2)

পলিমারফিজম (সি # প্রোগ্রামিং গাইড)

ভার্চুয়াল পদ্ধতির টেবিল

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