পলিমারফিজম কী, এটি কীসের জন্য এবং এটি কীভাবে ব্যবহৃত হয়?
পলিমারফিজম কী, এটি কীসের জন্য এবং এটি কীভাবে ব্যবহৃত হয়?
উত্তর:
আপনি যদি শব্দটির গ্রীক শিকড় সম্পর্কে চিন্তা করেন তবে এটি স্পষ্ট হওয়া উচিত।
সুতরাং বহুমুখীকরণ হ'ল ক্ষমতা (প্রোগ্রামিংয়ে) অন্তর্নিহিত ফর্মগুলি (ডেটা ধরণের) পৃথক করার জন্য একই ইন্টারফেস উপস্থাপন করার ক্ষমতা।
উদাহরণস্বরূপ, অনেকগুলি ভাষায়, পূর্ণসংখ্যা এবং ভাসমানগুলি স্পষ্টতই বহুত্বপূর্ণ হয় যেহেতু আপনি বিভিন্ন প্রকারের ভিন্ন ভিন্ন তা নির্বিশেষে আপনি যোগ করতে পারেন, বিয়োগ করতে পারেন, গুণ করতে পারেন এবং আরও কিছু করতে পারেন। এগুলি সাধারণ শব্দটিতে খুব কমই বস্তু হিসাবে বিবেচিত হয়।
কিন্তু, সেই একই ভাবে, মত একটি বর্গ BigDecimal
বা Rational
বা Imaginary
ওই অপারেশন প্রদান করতে পারেন, যদিও তারা বিভিন্ন ধরনের তথ্য উপর কাজ করে।
ক্লাসিক উদাহরণ এটি Shape
বর্গ এবং সমস্ত শ্রেণি যা এর উত্তরাধিকারী হতে পারে (বর্গক্ষেত্র, বৃত্ত, ডডেকাহেড্রন, অনিয়মিত বহুভুজ, স্প্ল্যাট এবং অন্যান্য)।
পলিমারফিজম সহ, এই ক্লাসগুলির প্রত্যেকের পৃথক অন্তর্নিহিত ডেটা থাকবে। একটি বিন্দুর আকারের জন্য কেবলমাত্র দুটি সমন্বয় প্রয়োজন (এটি অবশ্যই দ্বি-মাত্রিক জায়গাতে ধরে নেওয়া)। একটি বৃত্তের একটি কেন্দ্র এবং ব্যাসার্ধ প্রয়োজন। একটি বর্গক্ষেত্র বা আয়তক্ষেত্রের উপরের বাম এবং নীচের ডান কোণ এবং (সম্ভবত) একটি ঘূর্ণনের জন্য দুটি সমন্বয় প্রয়োজন। একটি অনিয়মিত বহুভুজের জন্য বিভিন্ন সিরিজের রেখা দরকার।
শ্রেণিটিকে তার কোডের পাশাপাশি ডেটাগুলির জন্য দায়ী করে, আপনি পলিমারফিজম অর্জন করতে পারেন। এই উদাহরণে, প্রতিটি শ্রেণীর নিজস্ব Draw()
ফাংশন থাকবে এবং ক্লায়েন্ট কোডটি কেবল এটি করতে পারে:
shape.Draw()
যে কোনও আকারের জন্য সঠিক আচরণ পেতে।
এটি কোডগুলি ডেটা থেকে আলাদা ছিল এমন কাজ করার পুরানো পদ্ধতির বিপরীতে, এবং আপনার যেমন drawSquare()
এবং এর মতো ফাংশন থাকতে পারে drawCircle()
।
অবজেক্ট ওরিয়েন্টেশন, পলিমারফিজম এবং উত্তরাধিকার সবগুলিই নিবিড়ভাবে সম্পর্কিত ধারণা এবং সেগুলি জানার জন্য অতীব গুরুত্বপূর্ণ। আমার দীর্ঘ ক্যারিয়ারে অনেকগুলি "রৌপ্য বুলেট" রয়েছে যা মূলত স্ফীত হয়ে গেছে তবে ও ও দৃষ্টান্তটি একটি ভাল হিসাবে প্রমাণিত হয়েছে। এটি শিখুন, এটি বুঝতে পারবেন, এটি পছন্দ করুন - আপনি খুশি হবেন :-)
(ক) আমি প্রথমে এটি একটি রসিকতা হিসাবে লিখেছি তবে এটি সঠিক হিসাবে প্রমাণিত হয়েছিল এবং তাই মজাদার নয়। মনোমর স্টায়ারিন কার্বন এবং হাইড্রোজেন থেকে তৈরি হতে দেখা যায় , এবং পলিস্টায়ারিন এর গ্রুপগুলি থেকে তৈরি হয় ।C8H8
(C8H8)n
সম্ভবত আমার বলা উচিত ছিল যে একটি পলিপ চিঠির অনেকগুলি উপস্থিতি ছিল p
যদিও এখন, আমাকে রসিকতাটি ব্যাখ্যা করতে হয়েছিল, এমনকি এটি মজাদারও বলে মনে হয় না।
কখনও কখনও, আপনি পিছনে থাকাকালীন আপনার উচিত :-)
Poly = many and Morph = change or form
পলিমারফিজম হ'ল আপনি যখন কোনও বস্তুর কোনও জিনিসের জেনেরিক সংস্করণ হিসাবে বিবেচনা করতে পারেন তবে আপনি যখন এটি অ্যাক্সেস করেন তখন কোডটি কোন সঠিক টাইপটি তা নির্ধারণ করে এবং সম্পর্কিত কোডটি কল করে।
এখানে সি # তে একটি উদাহরণ রয়েছে। কনসোল অ্যাপ্লিকেশনটির মধ্যে চারটি ক্লাস তৈরি করুন:
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));
}
}
এই উদাহরণে, আমরা বেস শ্রেণীর যানবাহনের একটি তালিকা তৈরি করি, যা এর প্রতিটি উপ-শ্রেণীর কয়টি চাকা রয়েছে তা সম্পর্কে জানেন না, তবে জানেন যে প্রতিটি উপ-শ্রেণীর কত চাকা রয়েছে তা জানার জন্য দায়বদ্ধ।
তারপরে আমরা তালিকায় একটি সাইকেল, গাড়ি এবং ট্রাক যুক্ত করি।
এরপরে, আমরা তালিকার প্রতিটি যানবাহনটি লুপ করতে পারি এবং সেগুলির সাথে সমস্তরূপে চিকিত্সা করতে পারি, তবে আমরা যখন প্রতিটি যানবাহনের 'চাকা'র সম্পত্তি অ্যাক্সেস করি তখন যানবাহন শ্রেণি সংশ্লিষ্ট কোডটি কার্যকর সাব-ক্লাসে প্রেরণ করে।
এই কোডটি বহুকোষী হিসাবে বলা হয়, যেহেতু কার্যকর কোডটি কার্যকর হয় তা রানটাইম সময়ে উপ-শ্রেণীর দ্বারা নির্ধারিত হয়।
আমি এই আপনি যে সাহায্য করে আশা করি।
Class_Excel
, কল Class_CSV
করার জন্য , বা একটি Reader
শ্রেণি কল করার জন্য কোনও ধরণের কারখানার শ্রেণি প্রয়োজন । যে কোনও উপায়ে, যদি পুনরায় / অন্যথায় / অন্য কোথাও কোথাও সংরক্ষণ করতে হয় তবে কিছু ধরণের পুনরাবৃত্তি ঘটতে পারে।
পিএইচপি-তে পলিমারফিজম বোঝা এবং প্রয়োগ করা থেকে , ধন্যবাদ স্টিভ গুইডিটি।
পলিমারফিজম একটি খুব সাধারণ ধারণার জন্য দীর্ঘ শব্দ।
পলিমারফিজম অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের এমন একটি প্যাটার্ন বর্ণনা করে যাতে সাধারণ ইন্টারফেস ভাগ করার সময় ক্লাসগুলির আলাদা কার্যকারিতা থাকে।
পলিমারফিজমের সৌন্দর্য হ'ল বিভিন্ন শ্রেণীর সাথে কাজ করা কোডটি এটি কোন শ্রেণিটি ব্যবহার করছে তা জানার দরকার নেই যেহেতু তারা সবাই একইভাবে ব্যবহৃত হচ্ছে। পলিমারফিজমের জন্য একটি বাস্তব বিশ্বের উপমা হল একটি বোতাম। সবাই কীভাবে কীভাবে বোতাম ব্যবহার করতে হয় তা জানেন: আপনি কেবল এটিতে চাপ প্রয়োগ করেন। একটি বোতাম "কী করে" তবে এটি কীভাবে সংযুক্ত রয়েছে এবং যে প্রসঙ্গে এটি ব্যবহৃত হচ্ছে তার উপর নির্ভর করে - তবে ফলাফল এটি কীভাবে ব্যবহৃত হয় তা প্রভাবিত করে না। যদি আপনার বস আপনাকে বোতাম টিপতে বলে, আপনার কাছে ইতিমধ্যে টাস্কটি সম্পাদনের জন্য প্রয়োজনীয় সমস্ত তথ্য রয়েছে।
প্রোগ্রামিং জগতে অ্যাপ্লিকেশনগুলিকে আরও মডুলার এবং এক্সটেনসিবল করতে পলিমারফিজম ব্যবহার করা হয়। ক্রিয়াকলাপের বিভিন্ন কোর্সের বর্ণনা দেওয়ার সাথে অগোছালো শর্তযুক্ত বিবৃতিগুলির পরিবর্তে, আপনি আপনার প্রয়োজনের ভিত্তিতে নির্বাচিত বিনিময়যোগ্য বস্তু তৈরি করেন। পলিমারফিজমের প্রাথমিক লক্ষ্য এটি।
যদি কেউ এই লোকদের CUT বলে
কি হবে?
সুতরাং উপরোক্ত উপস্থাপনাটি ওওপিতে বহুমুখিতা (একই নাম, ভিন্ন আচরণ) কী তা দেখায়।
আপনি যদি কোনও সাক্ষাত্কারের জন্য যাচ্ছেন এবং সাক্ষাত্কারকারীর কাছে আমরা যে ঘরে বসে আছি সেই একই কক্ষে পলিমারফিজমের জন্য একটি জীবন্ত উদাহরণ বলতে / বলার জন্য বলে,
উত্তর - ডোর / উইন্ডোজ
ভাবছি কিভাবে?
ডোর / উইন্ডোর মাধ্যমে - কোনও ব্যক্তি আসতে পারে, বাতাস আসতে পারে, আলো আসতে পারে, বৃষ্টি আসতে পারে ইত্যাদি etc.
এটি আরও ভাল এবং সহজ পদ্ধতিতে বোঝার জন্য আমি উপরের উদাহরণটি ব্যবহার করেছি .. আপনার যদি কোডের জন্য রেফারেন্সের প্রয়োজন হয় তবে উপরের উত্তরগুলি অনুসরণ করুন।
.foo()
পদ্ধতি থাকে তবে তাদের একটি সাধারণ ইন্টারফেস ভাগ করা উচিত। তবে এটি সত্য নয় এবং ভুল বিমূর্তির দিকে পরিচালিত করে। একটি ইন্টারফেসের একটি ভূমিকা যা খেলতে হবে তার সংজ্ঞা দেওয়া উচিত , যার অনেকগুলি বিভিন্ন বাস্তবায়ন থাকতে পারে, তবে সমস্তই একই ইনপুট সেট থেকে টানতে পারে এবং একই সেট আউটপুট থেকে কিছু ফেরত দেয়। x.cut(...)
সার্জন, স্টাইলিস্ট বা অভিনেতার জন্য একটি ইনপুট একই নয় এবং আউটপুটও নয়।
মার্কিন যুক্তরাষ্ট্রের রাষ্ট্রপতি পলিমারফিজম নিয়োগ করেন। কিভাবে? ঠিক আছে, তাঁর অনেক পরামর্শদাতা রয়েছেন:
প্রত্যেককে কেবল একটি জিনিসের জন্য দায়ী করা উচিত: উদাহরণ:
রাষ্ট্রপতি দস্তা লেপ, বা কোয়ান্টাম পদার্থবিজ্ঞানের বিশেষজ্ঞ নন। তিনি অনেক কিছুই জানেন না - তবে তিনি কেবল একটি জিনিস জানেন: কীভাবে দেশ চালাবেন।
কোড সহ এটি একই রকম: উদ্বেগ এবং দায়িত্বগুলি প্রাসঙ্গিক শ্রেণি / লোকদের পৃথক করা উচিত। অন্যথায় আপনি রাষ্ট্রপতি বিশ্বের আক্ষরিক সব কিছু জানতে চান - পুরো উইকিপিডিয়া। আপনার কোডের একটি শ্রেণিতে পুরো উইকিপিডিয়া রয়েছে তা কল্পনা করুন: এটি বজায় রাখা দুঃস্বপ্ন হবে।
রাষ্ট্রপতির কাছে এই সমস্ত নির্দিষ্ট বিষয়গুলি জানার জন্য কেন এটি খারাপ ধারণা?
যদি রাষ্ট্রপতি নির্দিষ্টভাবে লোকদের কী করতে হবে তা বলার অর্থ এই যে রাষ্ট্রপতিকে জানা দরকার না ঠিক কি। যদি রাষ্ট্রপতি নির্দিষ্ট জিনিস নিজেই জানতে চান, তার অর্থ এই যে আপনি যখন কোনও পরিবর্তন আনতে হবে তখন আপনাকে এটি কেবল দুটি জায়গায় নয়, দুটি স্থানে তৈরি করতে হবে।
উদাহরণস্বরূপ, যদি ইপিএ দূষণ আইন পরিবর্তন করে তবে তা যখন ঘটে: আপনার ইপিএ শ্রেণি এবং রাষ্ট্রপতি শ্রেণিতেও পরিবর্তন আনতে হবে । একের চেয়ে দুটি জায়গায় কোড পরিবর্তন করা বিপজ্জনক হতে পারে - কারণ এটি বজায় রাখা আরও শক্ত 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);
}
}
আপনার সত্যিকারের যা জানা দরকার তা হ'ল:
আমি সত্যিই আশা করি এটি আপনাকে সহায়তা করবে। আপনি কিছু বুঝতে না পারলে একটি মন্তব্য পোস্ট করুন এবং আমি আবার চেষ্টা করব।
if healthAdvisor? then do this:
এবং if petraus then do that etc.
এই প্যাটার্নটির পুনরাবৃত্তি করা দরকার এবং এটি অপ্রয়োজনীয় এবং জটিল। উপরে সম্পাদনা দেখুন।
পলিমারফিজম হ'ল এক শ্রেণীর অবজেক্টের সাথে চিকিত্সা করার ক্ষমতা যেমন এটি পিতামাতার শ্রেণী।
উদাহরণস্বরূপ, ধরা যাক অ্যানিমাল নামে একটি শ্রেণি আছে, এবং কুকুর নামে একটি শ্রেণি রয়েছে যা প্রাণীর কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। পলিমারফিজম হ'ল যে কোনও কুকুর অবজেক্টকে এনিমেল অবজেক্টের মতো আচরণ করার ক্ষমতা:
Dog* dog = new Dog;
Animal* animal = dog;
classes have different functionality while sharing a common interface
পলিমরফিজ্ম:
এটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের ধারণা 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 এ রেফারেন্স কারের জন্য, এফ এবং এইচ, এইচ পদ্ধতিটি কার ধরণের থেকে বিদ্যমান। সুতরাং, সংকলকটি কোনও সমস্যা ছাড়াই সংকলন প্রক্রিয়াটি পাস করে।
রান রান সময় কার্যকর করার ক্ষেত্রে, ভার্চুয়াল মেশিনটি সাব-টাইপযুক্ত অবজেক্টগুলির জন্য পদ্ধতিগুলি আহ্বান করে। সুতরাং, পদ্ধতি সরানো () তাদের নিজ নিজ প্রয়োগগুলি থেকে আহবান করা হয়েছে।
সুতরাং, সমস্ত বস্তু গাড়ি টাইপযুক্ত, তবে রান সময় চলাকালীন, সঞ্চালনটি সেই বস্তুর উপর নির্ভর করে যেখানে ডাকা হয়। একে পলিমারফিজম বলে।
সাধারণত এটি টাইপ এ-এর কোনও অবজেক্টের জন্য বি টাইপ বিয়ের কোনও বস্তুর মতো আচরণ করার ক্ষমতা বোঝায়। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে এটি সাধারণত উত্তরাধিকার দ্বারা অর্জন করা হয়। আরও কিছু পড়ার জন্য কিছু উইকিপিডিয়া লিঙ্ক:
সম্পাদনা: স্থির ভাঙা লিঙ্কগুলি।
classes have different functionality while sharing a common interface
পলিমারফিজমটি হ'ল:
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
}
আপনি একটি নির্দিষ্ট উদাহরণের পরিবর্তে কেবল একটি কাপ পাস করতে পারেন। এটি সাধারণভাবে এইডস দেয় কারণ আপনাকে প্রতিটি কাপের জন্য প্রতি একটি নির্দিষ্ট পরিমাপ () উদাহরণ সরবরাহ করতে হবে না
আমি জানি এটি অনেক ভাল উত্তর সহ একটি পুরানো প্রশ্ন তবে আমি একটি বাক্যটির উত্তর অন্তর্ভুক্ত করতে চাই:
উদ্ভূত প্রকারের সাথে চিকিত্সা করা যেমন এটির বেস টাইপ।
উপরে প্রচুর উদাহরণ রয়েছে যা এটি কার্যকরভাবে দেখায়, তবে আমি মনে করি এটি একটি ভাল সংক্ষিপ্ত উত্তর।
(আমি সম্পূর্ণ আলাদা কিছু নিয়ে অন্য আর্টিকেলটি ব্রাউজ করছিলাম .. এবং পলিমারফিজমটি পপ আপ হয়ে গেছে ... এখন আমি ভেবেছিলাম যে আমি জানি যে পলিমারফিজম কী ... তবে দৃশ্যত এই সুন্দর উপায়ে ব্যাখ্যা করা হয়নি .. কোথাও এটি লিখতে চেয়েছি .. আরও ভাল এখনও ভাগ করে নেবে ...)
http://www.eioba.com/a/1htn/how-i-explained-rest-to-my-wife
এই অংশ থেকে পড়ুন:
..... বহুমুখীতা। এটি বলার এক কৌতুকপূর্ণ উপায় যে বিভিন্ন বিশেষ্যগুলির ক্ষেত্রে তাদের একই ক্রিয়া প্রয়োগ করা যেতে পারে।
সাধারণভাবে বলতে গেলে, এটি একই বা অতিপরিচয়যুক্ত অনুরূপ এপিআই ব্যবহার করে বিভিন্ন ধরণের অবজেক্টের ইন্টারফেস করার ক্ষমতা। বিভিন্ন রূপ রয়েছে:
ফাংশন ওভারলোডিং: একই নাম এবং বিভিন্ন প্যারামিটার ধরণের সাথে একাধিক ফাংশন সংজ্ঞায়িত করা হয় যেমন স্কয়ার্ট (ফ্লোট), স্কয়ার্ট (ডাবল) এবং স্ক্র্যাট (জটিল)। বেশিরভাগ ভাষায় যা এটির অনুমতি দেয়, সংকলক স্বয়ংক্রিয়ভাবে তার মধ্যে প্রেরণযোগ্য ধরণের আর্গুমেন্টের জন্য সঠিকটি নির্বাচন করবে, সুতরাং এটি সংকলন-কালীন বহুবর্ষবাদ।
ওওপিতে ভার্চুয়াল পদ্ধতি: একটি শ্রেণীর একটি পদ্ধতিতে তার উপক্লাসগুলির নির্দিষ্টকরণের সাথে বিভিন্নভাবে প্রয়োগ করা যেতে পারে; এর প্রত্যেকটি বেস ক্লাসে প্রদত্ত বাস্তবায়নটিকে ওভাররাইড করে বলেছে। বেস ক্লাস বা এর যে কোনও সাবক্লাসের হতে পারে এমন কোনও বস্তু দেওয়া হলেও সঠিক প্রয়োগটি ফ্লাইতে নির্বাচিত হয়, সুতরাং এটি রান-টাইম পলিমারফিজম।
টেমপ্লেটস: কয়েকটি ওও ভাষার বৈশিষ্ট্য যার দ্বারা কোনও ফাংশন, শ্রেণি ইত্যাদি কোনও প্রকারের মাধ্যমে প্যারামিটারাইজড করা যায়। উদাহরণস্বরূপ, আপনি একটি জেনেরিক "তালিকা" টেম্পলেট শ্রেণি সংজ্ঞায়িত করতে পারেন এবং তারপরে এটিকে "পূর্ণসংখ্যার তালিকা", "স্ট্রিংগুলির তালিকা", এমনকি "স্ট্রিংগুলির তালিকাগুলির তালিকা" বা এর মতো হিসাবে ইনস্ট্যান্ট করতে পারেন। সাধারণত, আপনি একবার সালিসি উপাদান টাইপের ডেটা কাঠামোর জন্য কোডটি লিখে থাকেন এবং সংকলকটি বিভিন্ন উপাদান ধরণের জন্য এর সংস্করণ তৈরি করে।
বহুবচন শব্দটি এসেছে:
বহু = বহু
রূপচর্চা = পরিবর্তন করার ক্ষমতা
প্রোগ্রামিংয়ে, পলিমারফিজম এমন একটি "কৌশল" যা আপনাকে কোনও জিনিসের একাধিক ধরণের জিনিস হিসাবে "চেহারা" দেয়। এই ক্ষেত্রে:
একটি ছাত্র অবজেক্ট একটি ব্যক্তি অবজেক্ট। আপনি যদি ছাত্রটিকে "চেহারা" (যেমন কাস্ট) করেন তবে আপনি সম্ভবত শিক্ষার্থীর আইডি চাইতে পারেন। আপনি সবসময় একজন ব্যক্তির সাথে এটি করতে পারবেন না, তাই না? (কোনও ব্যক্তি অগত্যা শিক্ষার্থী নন, সুতরাং শিক্ষার্থীর আইডি নাও থাকতে পারে)। তবে কোনও ব্যক্তির সম্ভবত একটি নাম রয়েছে। একজন শিক্ষার্থীও করেন।
নীচের লাইনটি, বিভিন্ন "কোণ" থেকে একই বস্তুর দিকে "সন্ধান করা" আপনাকে বিভিন্ন "দৃষ্টিভঙ্গি" দিতে পারে (অর্থাত্ বিভিন্ন বৈশিষ্ট্য বা পদ্ধতি)
সুতরাং এই কৌশলটি আপনাকে এমন স্টাফ তৈরি করতে দেয় যা বিভিন্ন কোণ থেকে "দেখানো" যেতে পারে।
আমরা পলিমারফিজম কেন ব্যবহার করি? শুরুর জন্য ... বিমূর্ততা এই মুহুর্তে এটি যথেষ্ট তথ্য হওয়া উচিত :)
একটি উপমা ব্যবহার করা যাক। প্রদত্ত সংগীত স্ক্রিপ্টের জন্য প্রতিটি সংগীত যা এটি বাজায় তা ব্যাখ্যায় তার নিজস্ব স্পর্শ দেয়।
সঙ্গীতজ্ঞকে ইন্টারফেস দিয়ে বিমূর্ত করা যেতে পারে, যে সংগীতটির সাথে সংগীতজ্ঞ অন্তর্ভুক্ত এটি একটি বিমূর্ত শ্রেণি হতে পারে যা ব্যাখ্যার কিছু বিশ্বব্যাপী নিয়মকে সংজ্ঞায়িত করে এবং যে সঙ্গীত বাজায় তাকে কংক্রিট শ্রেণির মডেল করা যায়।
আপনি যদি বাদ্যযন্ত্রের শ্রোতা হন তবে আপনার কাছে স্ক্রিপ্টের একটি উল্লেখ রয়েছে যেমন বাচের 'ফুগা এবং টোকাটা' এবং এটি সম্পাদনকারী প্রতিটি সংগীতশিল্পী তার নিজস্ব উপায়ে বহুবৈচিত্র্য করেন।
এটি সম্ভাব্য নকশার (জাভাতে) কেবল উদাহরণ 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());
}
AnnHalloway
এবং VictorBorga
ক্লাসের পরিবর্তে তাদের বস্তু হওয়া উচিত বলে মনে করুন - উদাহরণস্বরূপ আপনার উদাহরণটি আরও ভালভাবে পড়তে পারে। public class Pianist implements Musician
এবং victorBorge = new Pianist();
ইত্যাদি
আমি অন্য প্রশ্নের জন্য বহুবর্ষের উচ্চ পর্যায়ের ওভারভিউ সরবরাহ করেছি:
আশা করি এটা সাহায্য করবে. একটি নিষ্কাশন ...
... এটি এর জন্য একটি সাধারণ পরীক্ষা এবং [বহুবিজ্ঞান] এর সংজ্ঞা থেকে শুরু করতে সহায়তা করে। কোডটি বিবেচনা করুন:
Type1 x;
Type2 y;
f(x);
f(y);
এখানে
f()
কিছু অপারেশন করা এবং মানx
এবংy
ইনপুট হিসাবে দেওয়া হচ্ছে । বহুমুখী হতে,f()
কমপক্ষে দুটি স্বতন্ত্র ধরণের (যেমনint
এবংdouble
) মানগুলির সাথে পরিচালনা করতে সক্ষম হতে হবে , টাইপ-উপযুক্ত কোড সন্ধান এবং সম্পাদন করতে হবে।
( সি ++ তে পলিমারফিজমে অবিরত )
পলিমॉারফিজম হ'ল একটি বস্তুর বিভিন্ন রূপ ধারণ করার ক্ষমতা। ওওপিতে পলিমারফিজমের সর্বাধিক প্রচলিত ব্যবহার তখন ঘটে যখন পিতা-মাতার শ্রেণি রেফারেন্সটি শিশু শ্রেণীর অবজেক্টের জন্য উল্লেখ করা হয়। জাভাতে লেখা এই উদাহরণে আমাদের তিন ধরণের যানবাহন রয়েছে। আমরা তিনটি পৃথক বস্তু তৈরি করি এবং তাদের চাকা পদ্ধতি চালানোর চেষ্টা করি:
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 দেখুন । আমি আসা করি এটা সাহায্য করবে.
পলিমারফিজম হ'ল প্রোগ্রামারের সেই একই নামের পদ্ধতিগুলি লেখার ক্ষমতা যা সেই সমস্ত বস্তুর প্রয়োজনের উপর নির্ভর করে বিভিন্ন ধরণের বস্তুর জন্য বিভিন্ন কাজ করে। উদাহরণস্বরূপ, আপনি যদি একটি ক্লাস নামে পরিচিত 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()
পদ্ধতিটি কল করা হবে, যদিও ব্যবহারকারী কোনও ভগ্নাংশ বা জটিল সংখ্যা চয়ন করবে কিনা তা বিকাশকারী সময়ের আগেই জানতে পারে না।
পলিমারফিজমের আক্ষরিক অর্থ, একাধিক আকার। (বা অনেকগুলি ফর্ম): বিভিন্ন শ্রেণি এবং একই নাম পদ্ধতি থেকে অবজেক্ট, তবে কর্মপ্রবাহগুলি ভিন্ন। একটি সাধারণ উদাহরণ হবে:
একজন ব্যক্তির এক্স বিবেচনা করুন।
তিনি কেবল একজন ব্যক্তি তবে তিনি যতগুলি অভিনয় করেন। আপনি জিজ্ঞাসা করতে পারেন কিভাবে:
তিনি তার মায়ের একটি পুত্র। তার বন্ধুদের বন্ধু। তার বোনের এক ভাই।
ওওপিতে পলিমারফিজম বলতে বোঝায় যে কোনও শ্রেণীর বিভিন্ন ধরণের থাকতে পারে, পলিমারফিজম প্রয়োগের একটি উপায় হ'ল উত্তরাধিকার।
উদাহরণস্বরূপ, শেপটি একটি ইন্টারফেস, এতে স্কোয়ার , সার্কেল , ডায়মন্ড সাব টাইপ রয়েছে। এখন আপনার একটি স্কোয়ার অবজেক্ট রয়েছে, আপনি স্কয়ারটি স্বয়ংক্রিয়ভাবে আকারে তুলতে পারবেন, কারণ স্কয়ারটি একটি শেপ। তবে আপনি যখন শেপকে স্কয়ারে ডাউন কাস্টিং করার চেষ্টা করবেন, আপনাকে অবশ্যই স্পষ্ট ধরণের কাস্টিং করতে হবে, কারণ আপনি শেপটিকে স্কোয়ার বলতে পারেন না, এটি বৃত্তও হতে পারে। সুতরাং আপনার কোডটি ম্যানুয়ালি কোডের মতো কোডের সাহায্যে তৈরি Square s = (Square)shape
করতে হবে, যদি আকারটি বৃত্ত হয় তবে কী পাবেন java.lang.ClassCastException
, কারণ বৃত্তটি স্কোয়ার নয়।
পলিমরফিজ্ম:
শ্রেণীর উদাহরণ অনুসারে পৃথক সম্পাদন, রেফারেন্স ভেরিয়েবলের ধরণ নয়।
একটি ইন্টারফেস টাইপ রেফারেন্স ভেরিয়েবল সেই ইন্টারফেসটি প্রয়োগ করে এমন কোনও শ্রেণীর উদাহরণকে উল্লেখ করতে পারে।
পলিমর্ফিজম একটি নির্দিষ্ট শ্রেণিতে কোনও অবজেক্ট ব্যবহার করার ক্ষমতা, যেখানে বস্তুটি তৈরি করা সমস্ত উপাদান প্রদত্ত শ্রেণীর সাবক্লাস দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয়। এর অর্থ হ'ল একবার এই বস্তুটি কোনও শ্রেণি দ্বারা ঘোষিত হয়ে গেলে এর নীচে সমস্ত উপক্লাসগুলি (এবং ততোধিক সাবক্লাস এবং আরও কিছুক্ষণ আপনি অবধি / সর্বনিম্ন সাবক্লাসে পৌঁছা না হওয়া) অবজেক্টটি উত্তরাধিকার সূত্রে গ্রহণ করে এবং এর উপাদানগুলি (মেকআপ)।
মনে রাখবেন না যে প্রতিটি শ্রেণি পৃথক ফাইলে সংরক্ষণ করতে হবে।
নীচের কোড বহুরূপীকরণের উদাহরণ দেয়:
সুপারক্লাস:
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();
}
}
নোট করুন যে প্রতিটি শ্রেণিকে পৃথক *। জাভা ফাইলগুলিতে ঘোষণা করা দরকার। কোডটি সংকলন করা উচিত। এছাড়াও লক্ষ করুন যে আপনি ক্রমাগতভাবে মেইননম এবং ফ্যামিলি ট্রি আরও নিচে ব্যবহার করতে পারেন। এটি বহুবর্ষের ধারণা। উত্তরাধিকারের ধারণাটি এখানেও অনুসন্ধান করা হয়েছে, যেখানে একটি শ্রেণি ব্যবহার করা যেতে পারে বা সাবক্লাস দ্বারা আরও সংজ্ঞায়িত করা হয়েছে।
আশা করি এটি সহায়তা করে এবং এটি পরিষ্কার করে দেবে। কোডটি যাচাই করতে আমি ব্যবহার করতে পারি এমন কোনও কম্পিউটার খুঁজে পেলে ফলাফলগুলি পোস্ট করব। ধৈর্য জন্য ধন্যবাদ!
পলিমারফিজম একই রুটিনকে (ফাংশন, পদ্ধতি) বিভিন্ন ধরণের কাজ করতে দেয়।
যেহেতু প্রচুর বিদ্যমান উত্তরগুলি পলিমারফিজমের সাথে সাবটিপিংয়ের বিবাদ করছে, তাই পলিমারফিজম বাস্তবায়নের জন্য এখানে তিনটি উপায় (সাব টাইপিং সহ) রয়েছে।
আরো দেখুন:
http://wiki.c2.com/?CategoryPolymorphism
https://en.wikipedia.org/wiki/Polymorphism_(computer_science)
অবজেক্ট ওরিয়েন্টেড ভাষায়, পলিমারফিজম একই ইন্টারফেসের মাধ্যমে বিভিন্ন ডেটা ধরণের চিকিত্সা এবং পরিচালনা করার অনুমতি দেয়। উদাহরণস্বরূপ, সি ++ তে উত্তরাধিকার বিবেচনা করুন: ক্লাস বি ক্লাস এ থেকে উদ্ভূত হয়েছে এ টাইপের একটি পয়েন্টার (ক্লাস এ টু পয়েন্টার) শ্রেণি 'এ' এবং 'বি' শ্রেণীর অবজেক্ট উভয়কে পরিচালনা করতে ব্যবহৃত হতে পারে Class
কোডিং পদগুলিতে বহুতলতা হ'ল যখন আপনার বস্তুটি উত্তরাধিকার ইত্যাদির মাধ্যমে একাধিক ধরণের হিসাবে উপস্থিত থাকতে পারে you যদি আপনি "শেপ" নামে একটি শ্রেণি তৈরি করেন যা আপনার অবজেক্টের পাশের সংখ্যা নির্ধারণ করে তবে আপনি একটি নতুন শ্রেণি তৈরি করতে পারেন যা এটির জন্য উত্তরাধিকার সূত্রে প্রাপ্ত হয় যেমন "স্কয়ার" "। পরবর্তীকালে আপনি যখন "স্কয়ার" এর উদাহরণ তৈরি করেন আপনি তারপরে এটিকে পিছনে ফেলে প্রয়োজনীয় হিসাবে "শেপ" থেকে "স্কয়ার" এ ফরোয়ার্ড করতে পারেন।
পলিমারফিজম আপনাকে একটি মডিউলকে অন্য কল করে তৈরি করার সক্ষমতা দেয় এবং নিয়ন্ত্রণের প্রবাহের পরিবর্তে নিয়ন্ত্রণ প্রবাহের বিপরীতে সংকলনের সময় নির্ভরতা পয়েন্ট থাকে।
পলিমারফিজম ব্যবহার করে, একটি উচ্চ স্তরের মডিউল নিম্ন-স্তরের মডিউলের উপর নির্ভর করে না। উভয় বিমূর্ততা উপর নির্ভর করে। এটি আমাদের নির্ভরতা বিপরীত নীতিটি প্রয়োগ করতে সহায়তা করে ( https://en.wikedia.org/wiki/D dependency_inversion_prصول )।
এখানেই আমি উপরের সংজ্ঞাটি পেয়েছি। ভিডিওতে প্রায় 50 মিনিট প্রশিক্ষক উপরোক্ত ব্যাখ্যা করেন। https://www.youtube.com/watch?v=TMuno5RZNeE
পলিমারফিজম হ'ল ক্ষমতা:
বিশেষায়িত ধরণের পদ্ধতিটি কল করার সময় কেবল বিশেষায়িত ধরণের বিষয়টি জানতে পেরে বিশেষায়িত প্রকারের নজরে একটি ক্রিয়াকলাপটি চালান এবং জেনারালাইজড ধরণের নয়: এটি গতিশীল বহুবর্ষবাদ ।
সেভের নাম রয়েছে তবে বিভিন্ন পরামিতি রয়েছে এমন কয়েকটি পদ্ধতি নির্ধারণ করুন: এটি স্ট্যাটিক পলিমারফিজম ।
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();
এখানে শেপ ক্লাস এবং শেপ.ড্রো () পদ্ধতিগুলি বিমূর্ত হিসাবে চিহ্নিত করা উচিত।
তারা বোঝার জন্য নয়।
পলিমারফিজম ব্যতীত, বিমূর্ত-ভার্চুয়াল-ওভাররাইড ব্যবহার করে, আকারগুলি বিশ্লেষণ করার সময়, এটি কেবল স্পেহ.ড্রে (পদ্ধতি) যা সিএলআর হিসাবে ডাকা হয় কোন পদ্ধতিটি কল করতে হয় তা জানে না। সুতরাং এটি যে ধরণের উপরে আমরা অভিনয় করি তার পদ্ধতিকে কল করে এবং তালিকা প্রজ্ঞাপনের কারণে এখানে টাইপটি শেপ হয়। কোডটি কিছুতেই কিছু করে না।
পলিমারফিজমের সাহায্যে, সিএলআর হ'ল ভার্চুয়াল টেবিল যা ব্যবহার করে আমরা যে বস্তুটি ব্যবহার করি তার প্রকৃত ধরণের অনুমান করতে সক্ষম হয় । সুতরাং এটি ভাল পদ্ধতিটি কল করে এবং এখানে শেপকে ড্রেস (ড্র) () শেপ করুন যদি বিন্দুটি বিন্দুটিকে কল করে ra ড্র ()। কোডটি আকারগুলি আঁকবে।