উইন্ডোজ ফর্ম / সুইং ফ্রেমওয়ার্কগুলি রচনার পরিবর্তে উত্তরাধিকারের পক্ষে কেন?


12

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

উভয় ফ্রেমওয়ার্কের সাথে আমার প্রায় কোনও যোগাযোগ নেই, তবে সি # এর উইন্ডোজ ফর্মগুলিতে যা মনে আছে সেগুলি থেকে সাধারণত সুইংয়ের মতো নিয়ন্ত্রণগুলি বাড়ানো হয়।

সাধারণত যেহেতু লোকেরা উত্তরাধিকারের তুলনায় রচনাটিকে প্রাধান্য দেয়, তাই কেন সুইং / উইন্ডোজ ফর্মগুলি উত্তরাধিকারের পরিবর্তে রচনা পছন্দ করে না?


2
সেই API গুলি প্রায় 15-20 বছরে অনেক কিছু পরিবর্তিত হয়েছে! রেন্ডারিং ইঞ্জিনগুলিতে যেকোন স্বেচ্ছাসেবী কংক্রিটের ক্লাসের উদাহরণ "আগের দিন" এর বিরুদ্ধে স্ক্রিন অবজেক্টগুলিকে আবদ্ধ করার জন্য ম্যাজিক এক্সএমএল আঠা ছিল না;)

1
আমি দেখতে পাওয়া বেশিরভাগ সুইং কোডটি রচনা অনুসারে এক্সটেনশন ব্যবহার করে। আমি নিশ্চিত না যে আপনার প্রোফেসর কোথায় তার ডেটা পাচ্ছে।

আমি নিজেও রচনার পরিবর্তে উত্তরাধিকার নিয়ে নেটে প্রচুর দুলতে দেখেছি - বেশিরভাগ টিউটোরিয়াল যদিও। তবে উইন্ডোজ ফর্মগুলি প্রায়শই সম্পূর্ণ উত্তরাধিকার অনুসারে ব্যবহৃত হয়!

উত্তর:


7

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

class MyComponent implements JComponent {
    JPanel panel;
    public boolean contains(int x, int y) {
        return panel.contains(x, y);
    }
    ...
}

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


2

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


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

@ ডেভুরড ইলিজিয়াম এটি সত্য। তবে ফর্মটি তৈরি করতে তারা রচনা ব্যবহার করবে। সুতরাং এটি কিছুটা উত্তরাধিকার এবং প্রচুর রচনা।

@ ডেভোরড, আমি মনে করি এটি এমন একটি ঘটনা যা লোকেরা বুঝতে পারে না যে তারা যে টিউটোরিয়াল ব্যবহার করে তা সর্বোত্তম অনুশীলন অনুসরণ করে না কারণ এটি সংক্ষিপ্ততার পক্ষে।
পিটার টেইলর

1

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

আমি ডব্লিউপিএফ এর মতো জিনিসগুলির সাথে ভাবি যেখানে ডেটা বাইন্ডিং ডিজাইনের প্রাথমিক বৈশিষ্ট্য, উত্তরাধিকারের পরিবর্তে রচনাটি তৈরি করা অনেক সহজ করে তোলে।


"সবকিছু ভার্চুয়াল " এর অর্থ কী ?
জোনাস

জাভাতে, প্রতিটি পদ্ধতি নিখুঁতভাবে ভার্চুয়াল (ওভাররাইড করা যেতে পারে)। সি #, আপনি স্পষ্টভাবে যেমন একটি পদ্ধতি ডিক্লেয়ার করা আছে virtual, এবং এটিকে ওভাররাইড করতে, আপনি স্পষ্টভাবে এটি একটি যেমন ঘোষণা override। জাভাতে, আপনি যা কিছু দেখতে পাচ্ছেন সেটিকে ওভাররাইড করতে পারেন এবং আপনি একটি সাবক্লাসে এর দৃশ্যমানতা বাড়াতে পারেন (আপনি একটি সাবক্লাসে সুরক্ষিত পদ্ধতিগুলি পাবলিক করতে পারেন!)
জন গার্ডনার

নোট করুন যে আপনি finalজাভাতে কোনও পদ্ধতিকে ওভাররাইড করতে পারবেন না , এমনকি যদি বেস ক্লাসটি নিজেই নাও থাকে final
পের্প

এটা সত্য @perp। তবে জাভাতে ভার্চুয়াল প্রতিরোধের জন্য আপনাকে আপনার পথ ছাড়তে হবে (চূড়ান্ত যোগ করা) । সি # হ'ল বিপরীত উপায়, আপনাকে ভার্চুয়াল হতে আপনার পথ ছাড়তে হবে । এবং স্ট্যান্ডার্ড জাভা রানটাইমের একটি খুব সামান্য শতাংশ চূড়ান্ত চিহ্নিত করা হয়।
জন গার্ডনার 16

1

ইন কার্যকরী জাভা , আইটেম 17, ব্লচ উল্লেখ করেছেন যে একটি শ্রেণী পরিকল্পিত উত্তরাধিকার জন্য "overridable পদ্ধতির তার স্ব-ব্যবহার নথি আবশ্যক।" এর একটি বৈশিষ্ট্য হল এই প্রয়োগটি শব্দবন্ধ । তোমার মত শ্রেণীর এটা দেখতে পাবেন JTableএবং JInternalFrame। এটি সুইং-এ ডিজাইনের মাধ্যমে উত্তরাধিকারের এক পরিমাপ।


-2

সি # 3.5 থেকে, আমাদের কাছে এক্সটেনশন পদ্ধতি হিসাবে পরিচিত একটি ধারণা রয়েছে যা উত্তরাধিকারের তুলনায় রচনার ধারণাটিকে অনুমতি দেয়।

এই প্রক্রিয়াটিতে, আমরা কেবলমাত্র একটি এক্সটেনশন ক্লাস যুক্ত করে একটি বিদ্যমান বর্গের একটি বর্ধিত কার্যকারিতা বাস্তবায়ন করি যা বিদ্যমান শ্রেণিতে নতুন বৈশিষ্ট্যটি উপস্থাপন করে।

আপনি আরও বিশদ জন্য এখানে উল্লেখ করতে পারেন


নতুন উইনফোর্ডস কন্ট্রোল ক্লাস তৈরির জন্য আমি প্রাসঙ্গিকতা দেখছি না। আপনি বিস্তারিত বলতে পারেন?
পিটার টেলর

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

1
আমি জানি এক্সটেনশন পদ্ধতিগুলি কী, এবং সেগুলি অনেক সময়ে যথেষ্ট কার্যকর তবে এই প্রশ্নটি নতুন ক্লাস তৈরির বিভিন্ন পদ্ধতির বিষয়ে।
পিটার টেলর

@ পিটার: তারপরে আমি কেবলমাত্র আংশিক ক্লাসের ব্যবহারের দিকে ইঙ্গিত করতে পারি, এটি ছাড়া আমার বোঝার সি # এর অন্য কোনও উল্লেখযোগ্য বৈশিষ্ট্য নেই। আপনি যদি কারও কিছু জানেন তবে দয়া করে আমাকে জানান।
সারায়ানান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.