লিসকভ সাবস্টিটিউশন নীতিটি কি অন্তর্মুখী বা হাঁসের টাইপিংয়ের সাথে বেমানান?


11

আমি কী সঠিকভাবে বুঝতে পারি যে হাঁসের টাইপ করা ভাষায় স্বাভাবিকের মতো লিসকভ সাবস্টিটিউশন নীতিমালা এমন ভাষাগুলিতে পালন করা যায় না যেখানে বস্তুগুলি নিজেরাই পরিদর্শন করতে পারে?

উদাহরণস্বরূপ, রুবি, যদি একটি বর্গ Bএকটি বর্গ থেকে উত্তরাধিকারী A, তারপর প্রতি বস্তুর xএর A, x.classফিরে যাচ্ছে A, কিন্তু যদি xহল একটি অবজেক্ট B, x.classআসতে যাচ্ছে না A

এখানে এলএসপির বিবৃতি দেওয়া হল:

টি (x) টির মতো টি x এর অবজেক্টগুলির সম্পর্কে প্রমাণযোগ্য একটি সম্পত্তি হতে দিন । তারপর কুই (Y) প্রতিপাদ্য হওয়া উচিত জন্য বস্তু Y টাইপ S যেখানে এস একটি উপপ্রকার হয় টি

সুতরাং রুবিতে, উদাহরণস্বরূপ,

class T; end
class S < T; end

এই ফর্মটিতে এলএসপি লঙ্ঘন করুন, যেমন Q (x) = দ্বারা সম্পত্তি হিসাবে দেখা হয়েছেx.class.name == 'T'


যোগ. যদি উত্তরটি "হ্যাঁ" হয় (অন্তর্দর্শনের সাথে এলএসপি বেমানান), তবে আমার অন্য প্রশ্নটি হ'ল: এলএসপির এমন কিছু সংশোধিত "দুর্বল" রূপ রয়েছে যা সম্ভবত গতিশীল ভাষার জন্য থাকতে পারে, সম্ভবত কিছু অতিরিক্ত শর্তে এবং কেবলমাত্র বিশেষ ধরণের সাথে এর বৈশিষ্ট্য


হালনাগাদ. রেফারেন্সের জন্য, এখানে ওয়েবে আমি খুঁজে পেয়েছি এলএসপির আরও একটি সূত্র:

বেস ক্লাসে পয়েন্টার বা রেফারেন্স ব্যবহার করে এমন ফাংশনগুলি অজান্তেই উত্পন্ন ক্লাসের অবজেক্টগুলি ব্যবহার করতে সক্ষম হতে হবে।

এবং অন্য:

যদি এস টি টি-এর ঘোষিত উপ-টাইপ হয়, তবে টাইপ এস-এর অবজেক্টগুলি টি-এর টাইপের অবজেক্ট হিসাবে আচরণ করা উচিত, যদি তারা টি টাইপের বস্তু হিসাবে বিবেচনা করা হয় if

শেষটি এটিকে টিকা দেওয়া হয়:

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

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

তাহলে কি এলএসপি কোনও প্রোগ্রামিং ভাষায় একজোড়া শ্রেণীর সম্পত্তি নয়, পূর্বপুরুষ শ্রেণীর দ্বারা সন্তুষ্ট একটি নির্দিষ্ট সংস্থার সাথে একত্রে ক্লাসের এক জোড়া? ব্যবহারিকভাবে, এর অর্থ কি এলএসপিকে সম্মান করে একটি সাবক্লাস (বংশধর শ্রেণি) তৈরি করতে পূর্বপুরুষের সমস্ত সম্ভাব্য ব্যবহারগুলি জানা থাকতে হবে? এলএসপির মতে পূর্বপুরুষের বর্গটি কোনও বংশধর শ্রেণীর সাথে প্রতিস্থাপনযোগ্য হওয়ার কথা, তাই না?


হালনাগাদ. আমি ইতিমধ্যে উত্তরটি স্বীকার করে নিয়েছি, তবে আমি প্রশ্নটি বর্ণনা করার জন্য রুবি থেকে আরও একটি দৃ concrete় উদাহরণ যুক্ত করতে চাই। রুবিতে, প্রতিটি শ্রেণি এই অর্থে একটি মডিউল যা Classক্লাস বর্গের বংশধর Module। যাহোক:

class C; end
C.is_a?(Module) # => true
C.class # => Class
Class.superclass # => Module

module M; end
M.class # => Module

o = Object.new

o.extend(M) # ok
o.extend(C) # => TypeError: wrong argument type Class (expected Module)

2
প্রায় সমস্ত আধুনিক ভাষা কিছুটা অন্তরীক্ষণ সরবরাহ করে, সুতরাং প্রশ্নটি রুবির পক্ষে সুনির্দিষ্ট নয়।
জোছিম সাউর

আমি বুঝতে পারি, আমি উদাহরণস্বরূপ রুবিকে দিয়েছিলাম। আমি জানি না, অন্তর্মুখের সাথে অন্য কয়েকটি ভাষায় এলএসপির কিছু "দুর্বল রূপ" রয়েছে, তবে, যদি আমি নীতিটি সঠিকভাবে বুঝতে পারি, তবে এটি অন্তর্নিবেশের সাথে বেমানান।
অ্যালেক্সি

আমি শিরোনাম থেকে "রুবি" সরিয়েছি।
অ্যালেক্সি

2
সংক্ষিপ্ত উত্তরটি তারা সামঞ্জস্যপূর্ণ। এখানে একটি ব্লগ পোস্ট যা আমি বেশিরভাগের সাথেই একমত: এখানে হাঁসের টাইপিংয়ের
লিসকোভ

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

উত্তর:


29

আসল নীতিটি এখানে :

ধরণের q(x)জিনিসগুলির সম্পর্কে প্রমাণযোগ্য একটি সম্পত্তি হতে দিন । তারপরে যেখানে উপ- প্রকারের ধরণের অবজেক্টগুলির জন্য প্রমাণযোগ্য হওয়া উচিত ।xTq(y)ySST

এবং দুর্দান্ত উইকিপিডিয়া সারাংশ:

এটিতে বলা হয়েছে যে, একটি কম্পিউটার প্রোগ্রামে, যদি এস টি টির একটি উপ-প্রকার হয়, তবে টাইপ টির অবজেক্টগুলি এস টাইপের এসের সাথে প্রতিস্থাপন করা যেতে পারে (অর্থাত, এস টাইপের টির সাথে টি টাইপের টিয়ের জন্য প্রতিস্থাপিত করা যেতে পারে) কোনও পরিবর্তন না করেই। সেই প্রোগ্রামের কাঙ্ক্ষিত বৈশিষ্ট্য (সঠিকতা, কার্য সম্পাদন, ইত্যাদি)।

এবং কাগজ থেকে কিছু প্রাসঙ্গিক উদ্ধৃতি:

যা প্রয়োজন তা একটি শক্তিশালী প্রয়োজনীয়তা যা উপ-প্রকারের আচরণকে সীমাবদ্ধ করে: এমন কোনও বৈশিষ্ট্য যা কোনও বস্তুর অনুমিত প্রকারের স্পেসিফিকেশন ব্যবহার করে প্রমাণিত হতে পারে যদিও বস্তুটি আসলে সেই ধরণের একটি উপপ্রকারের সদস্য ...

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

প্রশ্নে তাই:

আমি কী সঠিকভাবে বুঝতে পারি যে হাঁসের টাইপের ভাষাগুলির মতো স্বাভাবিকভাবে লিসকভ সাবস্টিটিউশন নীতিমালা এমন ভাষাগুলিতে পালন করা যায় না যেখানে বস্তুগুলি নিজেরাই পরিদর্শন করতে পারে?

না।

A.classএকটি ক্লাস ফেরত।
B.classএকটি ক্লাস ফেরত।

যেহেতু আপনি আরও নির্দিষ্ট ধরণের একই কল করতে পারেন এবং একটি সুসংগত ফলাফল পেতে পারেন, এলএসপি ধরে। সমস্যাটি হ'ল গতিশীল ভাষাগুলি সহ, আপনি ফলাফলগুলি এখনও সেগুলি থাকার প্রত্যাশায় কল করতে পারেন।

তবে আসুন একটি স্ট্যাটিকাল, স্ট্রাকচারাল (হাঁস) টাইপ করা ভাষা বিবেচনা করুন। এই ক্ষেত্রে, A.classএমন প্রতিবন্ধকতা সহ এমন কোনও প্রকার ফেরত পাঠাবে যা এটি হতে হবে Aবা এর একটি উপপ্রকার A। এটি স্থিতিশীল গ্যারান্টি সরবরাহ করে যে যে কোনও উপ-প্রকার Aঅবশ্যই একটি পদ্ধতি প্রদান করবে T.classযার ফলস্বরূপ এমন এক ধরণ যা সেই সীমাবদ্ধিকে সন্তুষ্ট করে।

এটি একটি আরও দৃser় প্রতিবেদন সরবরাহ করে যে এলএসপি এমন ভাষাগুলিতে ধারণ করে যা হাঁসের টাইপিং সমর্থন করে এবং রুবির মতো কোনও ক্ষেত্রে এলএসপির কোনও লঙ্ঘন একটি ভাষা ডিজাইনের অসঙ্গতির চেয়ে স্বাভাবিক গতিশীল অপব্যবহারের কারণে বেশি ঘটে।


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

@ অ্যালেক্সি এলএসপি এর অর্থ অন্তর্ভুক্ত করার জন্য সম্পাদনা করেছেন। আমি যদি যেখানে এ আশা করি সেখানে আমি যদি বি ব্যবহার করতে পারি, তবে এলএসপি রাখে। আমি কী আগ্রহী যে আপনি কীভাবে রুবির। ক্লাসটিকে সম্ভবত লঙ্ঘন করেছেন।
টেলাস্টিন

3
@ অ্যালেক্সি - যদি আপনার প্রোগ্রামটি থাকে fail unless x.foo == 42এবং একটি উপ- টাইপ 0 ফিরে আসে তবে একই জিনিস। এটি এলএসপির ব্যর্থতা নয়, এটি আপনার প্রোগ্রামের সাধারণ ক্রিয়াকলাপ। পলিমারফিজম এলএসপির লঙ্ঘন নয়।
টেলাস্টিন

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

6
@ অ্যালেক্সি: আপনি যদি কিছু লিখেন যা x.class == A এর উপর নির্ভর করে তবে এটি আপনার কোড যা ভাষা নয়, এলএসপি লঙ্ঘন করে । প্রায় প্রতিটি প্রোগ্রামিং ভাষায় এলএসপি লঙ্ঘনকারী কোড লেখা সম্ভব।
আন্দ্রেস এফ।

7

এলএসপির প্রসঙ্গে একটি "সম্পত্তি" এমন একটি জিনিস যা কোনও ধরণের (বা কোনও বস্তুর) উপর লক্ষ্য করা যায়। বিশেষত এটি একটি "প্রবেগযোগ্য সম্পত্তি" সম্পর্কে কথা বলে।

এই জাতীয় "সম্পত্তি" এমন কোনও foo()পদ্ধতির অস্তিত্ব থাকতে পারে যার কোনও রিটার্নের মান নেই (এবং এর নথিতে চুক্তির সেটটি অনুসরণ করে)।

নিশ্চিত করুন যে আপনি এই শব্দটিকে "সম্পত্তি" দিয়ে বিভ্রান্ত করবেন না যেমন " classরুবিতে প্রতিটি বস্তুর সম্পত্তি"। এ জাতীয় "সম্পত্তি" একটি "এলএসপি সম্পত্তি" হতে পারে, তবে এটি স্বয়ংক্রিয়ভাবে একই হয় না!

এখন আপনার প্রশ্নের উত্তর আপনি "সম্পত্তি" সংজ্ঞায়িত করার জন্য কতটা কঠোর তা নির্ভর করে depends আপনি বলুন "ক্লাসের সম্পত্তি Aযে .classবস্তুর টাইপ ফিরে আসবে", তারপরে Bআসলে না যে সম্পত্তি আছে।

তবে, আপনি "সম্পত্তি" "হতে সংজ্ঞায়িত .classআয় A", তারপরে স্পষ্টত Bনেই না যে সম্পত্তি আছে।

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


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

1
@ অ্যালেক্সা: আমি এলএসপির প্রসঙ্গে "সম্পত্তি" অর্থ কী তা সম্পর্কে একটি ব্যাখ্যা দিয়ে আমার প্রশ্ন আপডেট করেছি।
জোছিম সৌর

2
@ অ্যালেক্সি: কাগজটি সন্ধান করে আমি একটি নির্দিষ্ট সংজ্ঞা বা "সম্পত্তি" পাই না। এটি সম্ভবত কারণ এই শব্দটি সাধারণ সিএস অর্থে ব্যবহৃত হয় "এমন কোনও কিছু যা কিছু অবজেক্ট সম্পর্কে পর্যবেক্ষণ / প্রমাণিত হতে পারে"। এটা আছে কিছুই অন্যান্য meaing "একটি বস্তুর একটি ক্ষেত্র" সঙ্গে না।
জোছিম সৌর

4
@ অ্যালেক্সা: আমি আপনাকে আর কী বলতে পারি তা আমি জানি না। আমি "একটি সম্পত্তি হ'ল কিছু বস্তুর গুণ বা গুণাবলী " এর সংজ্ঞাটি ব্যবহার করি । "রঙ" একটি দৈহিক, দৃশ্যমান বস্তুর সম্পত্তি । "ঘনত্ব" কোনও উপাদানের সম্পত্তি । "একটি নির্দিষ্ট পদ্ধতি থাকা" একটি শ্রেণি / সামগ্রীর সম্পত্তি a
জোছিম সৌর

4
@ অ্যালেক্সি: আমি মনে করি আপনি বাথ স্নানের জল দিয়ে বাচ্চা নিক্ষেপ করছেন: কেবলমাত্র কিছু সম্পত্তি হিসাবে এলএসপিকে ধরে রাখা যায় না তার অর্থ এই নয় যে এটি অকেজো বা "কোনও ভাষায় ধারণ করে না"। তবে সেই আলোচনা এখানেই চলে যাবে।
জোচিম সৌর

5

আমি এটি বুঝতে পেরেছি, অন্তর্মুখী সম্পর্কে কিছুই নেই যা এলএসপির সাথে বেমানান। মূলত, যতক্ষণ না কোনও বস্তু অন্যর মতো একই পদ্ধতিগুলিকে সমর্থন করে, ততক্ষণ দু'টি আদান-প্রদানযোগ্য হতে হবে। অর্থাৎ যদি আপনার কোড একটি আশা Addressবস্তু, তারপর, এটা না ব্যাপার যদি এটি একটি এর CustomerAddressবা WarehouseAddress, যতদিন উভয় প্রদান হিসাবে (যেমন) getStreetAddress(), getCityName(), getRegion()এবং getPostalCode()। আপনি অবশ্যই কিছু সাজসজ্জা তৈরি করতে পারেন যা বিভিন্ন ধরণের অবজেক্ট গ্রহণ করে এবং প্রয়োজনীয় পদ্ধতিগুলি সরবরাহের জন্য অন্তরীক্ষণ ব্যবহার করে (যেমন, এমন একটি DestinationAddressশ্রেণি যা কোনও Shipmentবস্তু নেয় এবং জাহাজটিকে ঠিকানা হিসাবে উপস্থাপন করে Address), তবে এটি প্রয়োজনীয় নয় এবং অবশ্যই এলএসপি প্রয়োগ হতে আটকাবে না।


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

1
@ অ্যালেক্সা: তবে আমার কেন এমন চুক্তি হবে? এই চুক্তিটি কোন বাস্তব ব্যবহার পূরণ করে? আমার যদি এই জাতীয় চুক্তি থাকে তবে আমি প্রতিটি প্রতিস্থাপনের x.class.nameসাথে সহজেই প্রতিস্থাপন করতে পারি 'A' , কার্যকরভাবে x.class.name অকেজো করে ফেলি ।
জোচিম সউর

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

2
@ আলেক্সি x.class.name == 'A'হাঁসের টাইপিংয়ের কোনও বিরোধী-প্যাটার্ন কিনা তা নির্ধারণের চেষ্টা করছেন : সর্বোপরি, হাঁসের টাইপিংটি এসেছে "যদি এটি কোমর করে হাঁসের মতো হাঁটে তবে এটি হাঁস"। সুতরাং যদি এটি প্রকাশিত Aচুক্তিগুলির মতো আচরণ করে এবং সম্মান দেয় তবে এটি Aএকটি Aউদাহরণ
স্টেফ

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

4

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

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

কাগজ থেকে প্রথম গুরুত্বপূর্ণ উদ্ধৃতি এখানে:

যা প্রয়োজন তা একটি শক্তিশালী প্রয়োজনীয়তা যা উপ-প্রকারের আচরণকে সীমাবদ্ধ করে: এমন কোনও বৈশিষ্ট্য যা কোনও বস্তুর অনুমানিত ধরণের স্পেসিফিকেশন ব্যবহার করে প্রমাণিত হতে পারে যদিও বস্তুটি আসলে সেই ধরণের একটি উপ-টাইপের সদস্য ...

এবং এখানে দ্বিতীয়টি, একটি ধরণের স্পেসিফিকেশন কী তা ব্যাখ্যা করে :

একটি ধরণের স্পেসিফিকেশনে নিম্নলিখিত তথ্যগুলি অন্তর্ভুক্ত থাকে:

  • ধরণের নাম;
  • ধরণের মান স্থানের বর্ণনা;
  • ধরণের প্রতিটি পদ্ধতির জন্য:
    • এটার নাম;
    • এর স্বাক্ষর (সংকেতযুক্ত ব্যতিক্রমগুলি সহ);
    • প্রাক-শর্ত এবং উত্তর-শর্তগুলির ক্ষেত্রে এর আচরণ।

সুতরাং, এলএসপি কেবল প্রদত্ত প্রকারের নির্দিষ্টকরণের ক্ষেত্রে সম্মান জানায় এবং উপযুক্ত ধরণের স্পেসিফিকেশন (উদাহরণস্বরূপ খালিটির জন্য) এটি সম্ভবত যে কোনও ভাষায় সন্তুষ্ট হতে পারে।

আমি তেলস্তিনের উত্তরকে আমি যা খুঁজছিলাম তার নিকটতম হিসাবে বিবেচনা করি কারণ "সীমাবদ্ধতাগুলি" স্পষ্টভাবে উল্লেখ করা হয়েছিল।


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

2
মার্কআপটি এক রকম নয়, এবং আমি কিছুটা জোর দিয়েছিলাম তবে উদ্ধৃতিগুলি অন্তর্ভুক্ত ছিল।
টেলাস্টিন

দুঃখিত, জোয়াচিম সৌর ইতিমধ্যে "প্রমাণযোগ্য" বৈশিষ্ট্যগুলির উল্লেখ করেছেন, যা আপনি অপছন্দ করেছেন। সাধারণভাবে, আপনি কেবল বিদ্যমান উত্তরগুলি পুনরায় ফিরিয়ে দিয়েছেন। সত্য, আপনি কি সন্ধান করছেন তা আমি জানি না ...
আন্দ্রেস এফ।

না, এটি "কি থেকে প্রমাণযোগ্য?" ব্যাখ্যা করা হয়নি। আপনি অত্যধিক জ্ঞানের অনুমতি দিলে সম্পত্তি x.class.name = 'A'সমস্ত xশ্রেণীর জন্য প্রমাণযোগ্য Aটাইপ স্পেসিফিকেশন সংজ্ঞায়িত করা হয়, এবং LSP সঙ্গে তার সঠিক সম্পর্ক যদিও অনাড়ম্বরভাবে কিছু ইঙ্গিতও দেওয়া হয়, হয় না। লিসকভের কাগজে আমি যা খুঁজছিলাম তা ইতিমধ্যে খুঁজে পেয়েছি এবং উপরে আমার প্রশ্নের উত্তর দিয়েছি।
অ্যালেক্সি

আমি মনে করি আপনি যে শব্দগুলিকে উত্সাহিত করেছেন তা মূল are তাহলে supertype নথি যে কোনো জন্য xযে ধরনের, x.woozleসমর্পণ করা হবে undefined, তাহলে তার, যার জন্য টাইপ x.woozleদেয় না undefinedএকটি সঠিক উপপ্রকার হবে। যদি সুপারটাইপ সম্পর্কে কোনও ডকুমেন্ট না করে, সুপারটাইপ x.woozleব্যবহার x.woozleকরা ফলনের ফলস্বরূপ ঘটে যা সত্যপরায়ণের ক্ষেত্রে কী করতে পারে undefinedসে সম্পর্কে কিছুই বোঝায় না।
সুপারক্যাট

3

এলএসপিতে উইকিপিডিয়ায় নিবন্ধটি উদ্ধৃত করার জন্য , " অবজেক্টিয়েন্ট প্রোগ্রামিংয়ের পরিবর্তনের বিষয়টি হ'ল নীতি"। এটি আপনার প্রোগ্রামের ডিজাইনের একটি নীতি এবং অংশ। যদি আপনি নির্ভর করে এমন কোডটি লিখেন x.class == Aতবে এটি আপনার কোড যা এলএসপি লঙ্ঘন করছে। নোট করুন এই জাতীয় ভাঙ্গা কোড জাভাতেও সম্ভব, কোনও হাঁসের টাইপিংয়ের প্রয়োজন নেই।

হাঁসের টাইপিংয়ের কিছুই অন্তর্নিহিতভাবে এলএসপিকে ভেঙে দেয়। আপনি যদি এটির অপব্যবহার করেন তবেই আপনার উদাহরণ হিসাবে।

অতিরিক্ত চিন্তা: যে কোনও উপায়ে হাঁসের টাইপিংয়ের উদ্দেশ্যকে স্পষ্টভাবে চেক করা হয়নি?


আন্দ্রেস, আপনি কি এলএসপির সংজ্ঞা দিতে পারবেন, দয়া করে?
আলেক্সি

1
@ আলেক্সি এলএসপির সংক্ষিপ্ত সংজ্ঞাটি উইকিপিডিয়ায় সাব টাইপের ক্ষেত্রে বর্ণিত হয়েছে। অনানুষ্ঠানিক সংজ্ঞাটি হ'ল Liskov's notion of a behavioral subtype defines a notion of substitutability for mutable objects; that is, if S is a subtype of T, then objects of type T in a program may be replaced with objects of type S without altering any of the desirable properties of that program (e.g., correctness).। কোনও বস্তুর সঠিক শ্রেণিটি "প্রোগ্রামের পছন্দসই বৈশিষ্ট্যগুলির" মধ্যে একটি নয়; অন্যথায় এটি কেবল হাঁসের টাইপিংয়ের বিরুদ্ধে নয় বরং সাধারণভাবে সাব টাইপিংয়ের বিপরীতে চলবে, জাভার স্বাদ অন্তর্ভুক্ত।
আন্দ্রেস এফ।

2
@ অ্যালেক্সা আরও মনে রাখবেন যে আপনার উদাহরণটি x.class == Aএলএসপি এবং হাঁসের টাইপ উভয়কেই লঙ্ঘন করে। আপনি যদি প্রকৃত প্রকারগুলি পরীক্ষা করতে যাচ্ছেন তবে হাঁসের টাইপিংয়ের কোনও বুদ্ধি নেই।
আন্দ্রেস এফ।

আন্দ্রেস, এই সংজ্ঞাটি আমার পক্ষে বোঝার পক্ষে যথাযথ নয়। কোন প্রোগ্রাম, প্রদত্ত একটি, বা কোনও? কাঙ্ক্ষিত সম্পত্তি কী? ক্লাসটি যদি কোনও লাইব্রেরিতে থাকে তবে বিভিন্ন অ্যাপ্লিকেশনগুলি বিভিন্ন বৈশিষ্ট্যকে আকাঙ্ক্ষিত বিবেচনা করতে পারে। এগুলি কোডের লাইনটি কীভাবে এলএসপিকে লঙ্ঘন করতে পারে তা দেখতে পাবে না, কারণ আমি ভেবেছিলাম যে এলএসপি একটি প্রদত্ত প্রোগ্রামিং ভাষায় একজোড়া শ্রেণীর সম্পত্তি ছিল: হয় ( A, B) এলএসপি সন্তুষ্ট করে বা না। যদি এলএসপি অন্য কোথাও ব্যবহৃত কোডের উপর নির্ভর করে তবে কোন কোডটি অনুমোদিত তা ব্যাখ্যা করা হয়নি। আমি এখানে কিছু খুঁজে পেতে আশা করি: cse.ohio-state.edu/~neelam/courses/788/lwb.pdf
আলেক্সি

2
@ আলেক্সি এলএসপি একটি নির্দিষ্ট ডিজাইনের জন্য (বা না) রাখে। এটি কোনও ডিজাইনে সন্ধান করার মতো বিষয়; এটি সাধারণভাবে কোনও ভাষার সম্পত্তি নয়। এটি প্রকৃত সংজ্ঞা: এর চেয়ে বেশি নির্দিষ্ট কিছু পায় না Let q(x) be a property provable about objects x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T। এটি স্পষ্টত যা x.classএখানে আকর্ষণীয় বৈশিষ্ট্যগুলির মধ্যে একটি নয়; অন্যথায় জাভার পলিমারফিজমটিও কাজ করবে না। নেই কিছুই আপনার "x.class সমস্যা" এ হাঁস টাইপিং সহজাত। আপনি এতক্ষণ একমত?
আন্দ্রেস এফ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.