অস্তিত্বের ধরণগুলি ইন্টারফেস থেকে কীভাবে আলাদা?


11

অস্তিত্বের ধরণ দেওয়া

T = X.{op₁:X, op₂:Xboolean}

এবং এই জেনেরিক জাভা ইন্টারফেস:

interface T<X> {
    X op₁();
    boolean op₂(X something);
}

অস্তিত্বের ধরণ এবং জাভা ইন্টারফেসের মধ্যে মৌলিক পার্থক্যগুলি কী কী?

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


উত্তর:


4

হুম ... এই সংজ্ঞাটি বেশ কিছুদিন আগে দেখেছি এমন কিছু হাস্কেলের নমুনার সাথে খুব মিল বলে মনে হচ্ছে।

{-# LANGUAGE ExistentialQuantification #-}
data X = forall a . X { value :: a, viewValue :: a -> String }
instance Show X where show (X { value = x, viewValue = f}) = f x
sample :: [X]
sample = [X 3 show, X "abc" show, X 3.14 show]

কনস্ট্রাক্টর Xপ্রয়োগ করা হলে ∀ আসলে হয়ে যায় ∃ মনে রাখবেন যে যখন আপনি বেরোবেন তখন আপনি valueপ্রকারটি জানেন না এবং এর উপরে খালি সেট অপারেশন রয়েছে। তবে যেহেতু viewValueএটি সহানুভূতির সাথে valueএটি প্রয়োগ করা যেতে পারে।

আমার ধারণা interfaceআপনি জাভাটির প্রধান পার্থক্যটি হ'ল এটি হ'ল যে আপনাকে পাসের ফলাফলটি পাস করার জন্য মধ্যবর্তী প্রকারটি জানতে op₁হবে op₂। অর্থাত অস্তিত্বের ধরণের জন্য সঠিক ব্যবস্থাটি সঠিক ধরণটি নির্বাচন করা উচিত যা শর্ত দ্বারা বিদ্যমান থাকার গ্যারান্টিযুক্ত। অর্থাত আপনি টাইপ সঙ্গে ফাংশন লিখতে পারবেন: ∀X. X→(X→boolean)→T। পূর্ববর্তী নমুনায় এ জাতীয় ফাংশনটি Xকনস্ট্রাক্টর ব্যবহৃত হয় X 3 show( showএটি এমন ফাংশন যা কোনও প্রকারের আর্গুমেন্ট গ্রহণ করে যা প্রয়োগ করে Showএবং ফেরত দেয় String)

আপডেট হয়েছে: আমি আপনার প্রশ্নটি কেবল পুনরায় পড়েছি এবং আমি মনে করি জাভার জন্য আমি যথাযথ নির্মাণ পেয়েছি:

interface T {
    boolean op₂();
}
...
T x = new T() {
    private final int op = ...;
    public boolean op₂() { return ((op % 2) == 0); }
};
T y = new T() {
    private final char op = ...;
    public boolean op₂() { return ('0' <= op && op <= '9'); }
};
if (x.op₂() && y.op₂()) ...

আপনি উল্লেখ সম্পর্কে ঠিক বলেছেন this- এটি আসলে আপনার পছন্দ ₁

সুতরাং আমি অনুমান করি যে আমি বুঝতে পেরেছি যে ধ্রুপদী ওওপি ভাষাগুলি (জাভা, সি #, সি ++ ইত্যাদি) সর্বদা একক মান সহ অস্তিত্বের ধরণের প্রয়োগ করে thisএবং এর উপর একটি পদ্ধতি যা "পদ্ধতি" নামে অভিহিত হয় যা স্পষ্টভাবে সেই মানটির সাথে ডাকে :)

পিএস দুঃখিত, আমি জাভার খুব বেশি পরিচিত নই, তবে আমি আশা করি আপনি ধারণাটি পেয়ে গেছেন।


আমি এটি যুক্ত করব যে আপনি ফাংশনাল প্রোগ্রামিং সহায়তার জন্য জাভা 8-এ চালু করা একক বিমূর্ত পদ্ধতি (এসএএম) টাইপটি দেখতে চান।
মার্টিজন ভার্গবার্গ

2

পার্থক্যটি হ'ল জাভা ইন্টারফেসটি আসলে জাভা সংকলকটির কিছু বোঝায়।

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


নাঃ। সিএফ উইলিয়াম কুক পেপার।
নিকোলাস

2

উপস্থাপিত 2 প্রকারগুলি একে অপরের থেকে খুব আলাদা। আপনি যে ইন্টারফেস সংজ্ঞাটি লিখেছেন তা সর্বজনীন ধরণের (জাভা জেনারিকগুলি সাধারণভাবে এই বিভাগে আসে)।

একটি অস্তিত্বের ধরণ গ্রাহক থেকে তার প্রয়োগের মধ্যে একটি প্রকার লুকায়। স্বজ্ঞাতভাবে, এক্স টি টিতে অস্তিত্বের জন্য, এক্স এর পরিচয় কোনও গ্রাহকের কাছ থেকে জানা যায় না; যা জানা উচিত তা হ'ল সংজ্ঞা অনুসারে সরবরাহ করা অপারেশনগুলির সেট। কিছু প্রকার এক্স এর জন্য এক ধরণের টি রয়েছে

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

ওয়াইল্ডকার্ডের সীমিত ক্ষেত্রে ( List<?>) ব্যতীত অস্তিত্বগুলি ভাষা জাভাতে আসলে জাভাতে উপস্থিত হয় না । তবে হ্যাঁ, সেগুলি ইন্টারফেসের মাধ্যমে অনুকরণ করা যায়। সমস্যাটি তখন ডিজাইনের আরও হয়ে যায়।

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

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