.NET কাঠামোর প্রথম শ্রেণীর ধরণের হিসাবে শ্রেণীর কোনও ধারণা নেই কেন?


20

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

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

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

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

নির্দিষ্ট উদাহরণ

ফর্ম Deserialization

ডেল্ফি ভিসিএল DFMফর্ম্যাটগুলিতে সংরক্ষণ করে, একটি ডিএনএসএল একটি উপাদান ক্রমবিন্যাস বর্ণনা করার জন্য। ফর্ম রিডার যখন ডিএফএম ডেটা বিশ্লেষণ করে তখন এটি এমনভাবে বর্ণনা করা অবজেক্টগুলিতে চলে:

object Name: ClassName
   property = value
   property = value
   ...
   object SubObjectName: ClassName
      ...
   end
end

আকর্ষণীয় জিনিস এখানে ClassNameঅংশ। প্রতিটি উপাদান শ্রেণি সময়কালে TClassউপাদান স্ট্রিমিং সিস্টেমের সাথে এটি নিবন্ধভুক্ত করে initialization(স্ট্যাটিকের সাথে সাথে ঘটনার গ্যারান্টিযুক্ত স্ট্যাটিক নির্মাতারা মনে করুন think) এটি প্রতিটি শ্রেণিকে একটি স্ট্রিং-> টিসিগ্লাস হ্যাশম্যাপে নিবন্ধ হিসাবে শ্রেণীর নামের সাথে নিবন্ধভুক্ত করে।

প্রতিটি উপাদান অবতরণ করে TComponent, যার একটি ভার্চুয়াল নির্মাতা রয়েছে যা একটি একক আর্গুমেন্ট গ্রহণ করে Owner: TComponent,। যে কোনও উপাদান এই নির্মাতাকে নিজের আরম্ভের জন্য সরবরাহ করতে ওভাররাইড করতে পারে। যখন ডিএফএম পাঠক একটি শ্রেণীর নাম পড়েন, তখন এটি উপরে বর্ণিত হ্যাশম্যাপে নামটি সন্ধান করে এবং সংশ্লিষ্ট বর্গ রেফারেন্সটি পুনরুদ্ধার করে (বা এটি না থাকলে একটি ব্যতিক্রম উত্থাপন করে), তারপরে এটি ভার্চুয়াল TComp घटक নির্মাণকারীকে কল করে, যা ভাল হিসাবে পরিচিত কারণ রেজিস্ট্রেশন ফাংশনটি এমন একটি শ্রেণি রেফারেন্স নেয় যা টিসিম্পোনেন্ট থেকে অবতরণ করতে হয় এবং আপনি সঠিক ধরণের কোনও অবজেক্টের সাথে শেষ করেন।

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

extensibility

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

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



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

7
@ রবার্তাহারভে: আমার কাছে ব্যক্তিগতভাবে সি # একবার জাভা / সি ++ পুনরায় লোড হওয়া হিসাবে এটি দেখা বন্ধ করে দিয়ে এটিকে বস্তুগুলির সাথে মডুলা -২ হিসাবে গণ্য করতে শুরু করায় আরও অনেক বেশি অর্থবোধ করতে শুরু করে। জাভাতেও এটি একই রকম: প্রত্যেকে বলে যে এটি সি ++ দ্বারা প্রভাবিত হয়েছিল, তবে এটি সত্য নয়। এর প্রধান প্রভাবটি অবজেক্টিভ-সি (এবং এটির মাধ্যমে স্মার্টটাক), এবং আপনি যখন জিসির সাথে সি ++ এর পরিবর্তে প্রকারের সাথে স্মার্টটাক হিসাবে বিবেচনা করেন তখন জাভা আরও অনেক বেশি অর্থবোধ করবে।
জার্গ ডব্লু মিটাগ

3
@ রবার্টহারভে: TClassএকটি মৌলিক ভাষা বৈশিষ্ট্য যার জন্য সংকলক সমর্থন প্রয়োজন। আপনি নিজের ভাষা না লিখে "নিজের নিজের লিখতে" পারবেন না, এবং নেট জন্যও এটি যথেষ্ট হবে না কারণ বস্তুর মডেলটি সিএলআর দ্বারা সংজ্ঞায়িত করা হয়েছে, পৃথক ভাষা দ্বারা নয়। এটি এমন কিছু যা আক্ষরিক অর্থেই নেট নেট ফ্রেমওয়ার্কের অংশ হওয়া দরকার বা এটি বিদ্যমান থাকতে পারে না।
ম্যাসন হুইলার

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

উত্তর:


5

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

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

সুতরাং সিওএম এবং অ্যাকটিভএক্স নিয়ন্ত্রণগুলির জনপ্রিয়তার ফলস্বরূপ, .NET আর্কিটেকচারটি COM IUnজ্ঞ, IClassFactory এবং ITypeLibrary সমর্থন করার জন্য তৈরি করা হয়েছিল। সিওএম-তে, এই ইন্টারফেসগুলি অভিন্ন অবজেক্টে অগত্যা ছিল না, সুতরাং এগুলি একসাথে লম্পিং করা অবশ্যই বোধগম্য হয়নি।

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