জিইউআই প্রোগ্রামিংয়ের জন্য সিগন্যাল + স্লট মডেলের কোনও ব্যবহারিক বিকল্প?


9

জিইআইআইয়ের বেশিরভাগ সরঞ্জামকিট আজকাল সংকেত + স্লট মডেল ব্যবহার করে। এটি কিউটি এবং জিটিকে + ছিল, যদি আমি ভুল না হয় তবে কে এটিকে অগ্রগামী করেছিল।

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

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

তবে, আমার প্রশ্নটি হ'ল:

আধুনিক জিইউআই প্রোগ্রামিংয়ের জন্য কোনও বিকল্প নকশা কি সমান্তরাল বা ব্যবহারিক?

অর্থাত্ সিগন্যাল + স্লট ডিজাইন কি শহরে একমাত্র ব্যবহারিক? অন্য কোনও ডিজাইনের সাথে জিইউআই প্রোগ্রামিং করা কি সম্ভব ? কোনও আধুনিক (অগ্রাধিকার সফল এবং জনপ্রিয়) জিইউআই টুলকিটগুলি কোনও বিকল্প ডিজাইনে নির্মিত?


উইন্ডোজ এপিআইতে আপনি যে বার্তাটির সারির প্যারাডাইমটি খুঁজে পান সেটি ইভেন্ট এবং প্রতিনিধিদের মতো নয় । প্রতিনিধিদের সিঙ্ক্রোনাস এবং অবিলম্বে বলা হয়, মত std::function, না একটি অ্যাসিঙ্ক্রোনাস সংকেত। উপরন্তু, WinAPI নেই প্রদান DefWindowProcযার ডিফল্ট বাস্তবায়ন যেমন উইন্ডোজ বার্তা প্রক্রিয়া করে। সুতরাং আমি প্রতিক্রিয়া জানাতে চাই যে আপনার প্রশ্নটি ত্রুটিযুক্ত যুক্তির উপর ভিত্তি করে।
ডেডএমজি

2
কিউটি এবং জিটিকে + প্রথম জিইউআই ফ্রেমওয়ার্কগুলিকে মৌমাছিকরণ থেকে অনেক দূরে যা কোনও ইভেন্ট চালিত পদ্ধতির ব্যবহার করে। ধারণাটি স্মলটালক -80-এ ফিরে এসেছে ( en.wikedia.org/wiki/Smalltalk )।
ডক ব্রাউন

আকর্ষণীয় প্রশ্ন, আমি আগ্রহী যদি এই মডেলটি মাল্টি-টাচ ইন্টারফেসগুলির সাথে অনেক বেশি পরিবর্তন করে।
বেন ডিমট

আমি উদার হব এবং ধরে নিই যে সে সেন্ডম্যাসেজ সম্পর্কে জানে যেটি কেবল পোস্টম্যাসেজ নয়, সিনক্রোনাস। তবে, তিনি এখনও ভুল করেছেন যে আপনাকে প্রতিটি বার্তার জন্য পুরো বার্তা হ্যান্ডলিং লুপটি কখনই লিখতে হত না।
gbjbaanb

জাভাএফএক্স তার বাইন্ডিংস এপিআইয়ের মাধ্যমে একটি অনুরূপ প্রক্রিয়া সরবরাহ করে।
ইঞ্জিনিয়ার ফুয়াদ

উত্তর:


7

যদিও আমি এটিকে এত জনপ্রিয় বলব না , জিইআইআই-এর জন্য সবসময় প্রতিক্রিয়াশীল প্রোগ্রামিং থাকে , বিশেষত কার্যকরী প্রতিক্রিয়াশীল প্রোগ্রামিং , যেমন প্রয়োগ করা হয়, উদাহরণস্বরূপ ,। নেট আরএক্স ফ্রেমওয়ার্ক দ্বারা , পাশাপাশি আরও কিছু রহস্যময় ভাষা / প্ল্যাটফর্মের বেশ কয়েকটি সরঞ্জামকিট দ্বারা মত প্রতিক্রিয়াশীল-কলা বা FrTime জন্য Haskell, এবং কোলাহল যথাক্রমে।


5

এটি আমার একটি প্রিয় বিষয়, এবং প্রায় এক দশক ধরে ('70 থেকে '86) আমি ভেবেছিলাম যে ইভেন্টগুলির প্রতিক্রিয়াযুক্ত বস্তুর সমন্বয়ে একটি জিইউআই রাখা এটি করার সঠিক উপায় was

তারপর আমি অন্য উপায় এটা করতে উপর পদস্খলিত এখানে বর্ণিত এবং SourceForge প্রকল্পের সঙ্গে এখানে

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

এই প্যাকেজ কি করে। সাধারণ কথোপকথনের জন্য, এটি কোডের আকারের ক্রম সংরক্ষণ করে। জটিল গতিময় পরিবর্তন সংলাপগুলির জন্য, এটি তাদেরকে সম্ভব করে তোলে।

পিএস আমি কেবল এটি ডেস্কটপ ইউআই এবং রিমোট টার্মিনাল ইউআই এর জন্য করেছি, ওয়েব ব্রাউজারের ইউআই নয়। আমি নিশ্চিত যে এটি সম্ভব, তবে চেষ্টা করার সুযোগ পাইনি।


+1, তবে কীভাবে অতিরিক্ত কার্যকারিতা অর্জন করা সম্ভব, যেমন ব্যবহারকারীর সংজ্ঞায়িত ইনপুট?
শিক্ষানবিসহ্যাকার

@ ইন্টারমিটারিয়েট হ্যাকার: আমি নিশ্চিত নই যে আপনি ব্যবহারকারী সংজ্ঞায়িত ইনপুট দ্বারা কী বোঝাতে চাইছেন। আপনার অর্থ কি কোনও ফর্ম-ডিজাইনার অ্যাপ্লিকেশন রয়েছে?
মাইক ডুনলাভে

2

ঠিক আছে, এ সম্পর্কে দুটি পৃথক উপায় রয়েছে:

  1. প্রতিটি উইজেটের গ্রানুলার সাবস্ক্রাইবিং মেকানিজম (সিগন্যাল / স্লট, পর্যবেক্ষক / পর্যবেক্ষণযোগ্য, ইভেন্ট / ডেলিগেট) উন্মুক্ত করুন এবং ক্লায়েন্ট কোডটি সাবস্ক্রাইব করুন এবং সেই অনুযায়ী ব্যবস্থা গ্রহণ করুন।
  2. এটি উপস্থাপন করে এমন ডেটা বিমূর্তির বিরুদ্ধে একটি উইজেট তৈরি করেছে এবং ক্লায়েন্ট কোডটি এই বিমূর্ততা প্রয়োগ করে।

দ্বিতীয় পদ্ধতির জন্য এখানে একটি উদাহরণ:

interface Action {
     void execute();
     Bool isEnabled();
     Null<String> description();//used for tooltip
}
interface LabledAction extends Action {
     String getName();
}

এবং এখন আপনি একটি এর LabelButtonবিরুদ্ধে একটি তৈরি করতে পারেন LabledActionএবং ক্লায়েন্ট কোড কেবল এটি প্রয়োগ করতে পারে বা উপলভ্য এবং উপযুক্ত হলে কিছু জেনেরিক ডিফল্ট বাস্তবায়ন ব্যবহার করতে পারে।

এক উপায়ে দ্বিতীয় পদ্ধতিটি কম নমনীয়, তবে আরও কঠোর। আপনি তুলনামূলকভাবে পারমাণবিক উপায়ে মডেলটির সাথে দৃশ্যটি কেবল কোনওভাবে একসাথে তারের করবেন না। আপনি আপনার প্রয়োজনীয়তার উপর ভিত্তি করে একটি উপযুক্ত জিইউআই নকশা করেন এবং তারপরে আপনি সেই জিইউআই এবং আপনার ডোমেন / অ্যাপ্লিকেশন যুক্তির মধ্যে অ্যাডাপ্টারগুলি প্রয়োগ করেন।


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

1

কয়েকটি কন্ট্রোল টাইপ সিস্টেম একটি ডাটাবেস পদ্ধতির ব্যবহার করে - প্রতিটি গুই নিয়ন্ত্রণ ডাটাবেসে ফাইল করা কোনও লিঙ্কের সাথে যুক্ত যাতে গুই সর্বদা ডাটাবেসের স্থিতি প্রতিবিম্বিত করে। যখন মান পরিবর্তন হয় তখন ডিবি হুকগুলি ফাংশনগুলি ট্রিগার করতে ব্যবহৃত হয়।


4
এটি কি কেবল অতিরিক্ত ডিবি স্তর সহ সিগন্যাল-স্লট নয়?
ratchet freak

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