অবজেক্টিভ-সি-তে একটি তথাকথিত "ক্লাস ক্লাস্টার" কী?


91

আমি পড়ছিলাম যে এনএসআর্রে ঠিক এমন একটি জিনিস। ভারী লাগছে। আমার ডেস্কে ওজেক্টিভ-সি, কোকো এবং সি সম্পর্কে 7 টি সত্যই চর্বিযুক্ত বই রয়েছে যার মধ্যে কোনওটিই ক্লাস ক্লাস্টারের উল্লেখ করেনি, কমপক্ষে বইগুলির পিছনে সূচীতে এটি খুঁজে পাচ্ছি না। তা কি?


ওফস, পরের বার আমি এই পদটির জন্য একটি লিঙ্ক যুক্ত করার চিন্তা করব। আপনি যদি পূর্বের প্রশ্নের উত্তরের বিষয়ে মন্তব্য করে থাকেন তবে আমি সেখানে উত্তর দিয়েছি have
জর্জি ফ্রিত্শে

4
এফডাব্লুআইডাব্লু: সম্প্রতি (ডিসেম্বর ২০১৩) অ্যাপল আইওএস while ব্যবহারের সময় আইওএস backward-এর পশ্চাদপদ-সামঞ্জস্যতা পরিচালনা করার উপায় হিসাবে ক্লাস ক্লাস্টারগুলি ব্যবহার করার পরামর্শ দিয়েছিল This অ্যাপল জানিয়েছে যে তারা শেষ ইভেন্টের (17. ডিসেম্বর) এর পরেই সেশনগুলির ভিডিও পোস্ট করবে। সুতরাং সম্ভবত এটি আইওএস 6/7 পরিবর্তনের প্রকৃত প্রসঙ্গের মধ্যে ক্লাস ক্লাস্টারগুলি বুঝতে সহায়তা করবে।
ব্রেনরে

উত্তর:


42

অ্যাপলের ডক্স থেকে ... । সংক্ষেপে এটি ফাউন্ডেশনের কাঠামোতে ব্যবহৃত একটি নকশার প্যাটার্ন, এটি সম্ভবত ওবিজির বইগুলিতে উল্লেখ করা হয়নি।

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


4
roflmao। ধন্যবাদ পরের বার গুগল করবে। ভেবেছি এটি যদি আমার ফ্যাট বইগুলিতে না হয় তবে এটি কেবল আপনার মাথায় থাকতে পারে;)
ওপেনফ্রোগ

4
এই লিঙ্কটি যে জিনিসটির অনুপস্থিত তা হ'ল এটি কীভাবে এটিআরসি-র জন্য বাস্তবায়নটি সবচেয়ে ভাল পরিবর্তন করা যায় তার একটি ব্যাখ্যা।
হাইপারবোল

193

আমি জানি না যে সিডিপিতে কী রয়েছে যা স্টিভ রেফারেন্স করেছে তবে মূলত অবজেক্টিভ-সি ক্লাস ক্লাস্টার এমন একটি কনস্ট্রাক্ট যা বিমূর্ত কারখানার প্যাটার্ন বাস্তবায়নের জন্য সমর্থন করে।

ধারণা সহজ : আপনি একটি কারখানার প্রদান করতে চান (ক্লাস্টার) ইন্টারফেস যে, ন্যূনতম বর্ণনা দিয়ে, উত্পাদন এবং আয় একটি কারখানা অবজেক্ট একটি নির্দিষ্ট কংক্রিট উদাহরণ হিসেবে বলা যায় মাফিক কারখানার (ক্লাস্টার) ইন্টারফেস দ্বারা বর্ণিত ক্লাস্টার পরিবারের আচরণ।

একটি সাধারণ কংক্রিটের উদাহরণ : এই উদাহরণটি একটি হাসির কারখানা সরবরাহ করে যা নির্দিষ্ট হাসির ধরণের কংক্রিট শ্রেণি তৈরি করে (যেমন গফা, জিগল)। হাসি দৃষ্টিতে হাসি: পদ্ধতিতে মনোযোগ দিন ।

হাসিতে:

#define kLaughWithGuffaw  1
#define kLaughWithGiggle  2

@interface Laugh: NSObject {}
- (Laugh *) initWithLaughter:(NSUInteger) laughterType;
- (void) laugh;
@end

হাসতে হাসতে:

@interface Guffaws:Laugh {}
- (void) laugh;
@end

@interface Giggles:Laugh {}
- (void) laugh;
@end

@implementation Laugh
- (Laugh *) initWithLaughter:(NSUInteger) laugherType {
    id instanceReturn=nil;
    ; // Removed for ARC [self release]
    if ( laughterType == kLaughWithGuffaw )
        instanceReturn = [[Guffaws alloc]init];
    else if( laughterType == kLaughWithGiggle )
        instanceReturn = [[Giggles alloc]init];
    else
        ; // deal with this
    return instanceReturn;
}

- (void) laugh {
    NSLog(@"Humbug");
}
@end

@implementation Guffaws
    - (void) laugh {
        NSLog(@"OH HA HA HOWAH HA HA HA");
    }
@end

@implementation Giggles
    - (void) laugh {
        NSLog(@"Tee hee");
    }
@end

24
অন্য উত্তরগুলি দস্তাবেজ এবং বইয়ের লিঙ্কগুলি সরবরাহ করার পক্ষে ভাল ছিল, তবে আমি এটি পছন্দ করি কারণ এটি কীভাবে এটি করতে হয় তা দেখতে এটি সুন্দর এবং সহজ করে তোলে simple ধন্যবাদ
জ্যামোন

এই উদাহরণটি ভাল তবে একটি সাধারণ কারখানার প্যাটার্নে সাবক্লাসগুলি সর্বজনীন। একটি ক্লাস ক্লাস্টারে সাবক্লাসগুলি ব্যক্তিগত হয়। বিকাশকারী.অ্যাপল.
com

4
@ অ্যাড্রিয়ানাভারো তারা যেহেতু ঘোষিত হয়েছে তেমন তারা বাহিরের কাছে দৃশ্যমান নয় .m-file
hfossli

4
(1) কোনও initপদ্ধতিতে নিজেকে ছেড়ে দেওয়া এবং অন্য কিছু ফিরিয়ে দেওয়া কতটা নিরাপদ ? অ্যাপল থেকে এমন কোনও কোডের উদাহরণ রয়েছে যেখানে তারা এটি করে? (২) এছাড়াও, আপনি সম্ভবত কোড সহ একটি উদাহরণ তৈরি করছেন [[Laugh alloc] initWithLaughter:kLaughWithGiggle]। কীভাবে Laughঅপ্রয়োজনীয়ভাবে বরাদ্দ দেওয়া হচ্ছে তা লক্ষ্য করুন , যেহেতু এই কল করার পরে এটি প্রকাশ করা হবে। আপনি যখন কোনও শ্রেণি পদ্ধতি তৈরি করতে পারেন যখন [Laugh laughWithLaughter:kLaughWithGiggle]উপরের 1 এবং 2 বিষয়গুলি এড়িয়ে গিয়ে আপনাকে ব্যক্তিগত সাবক্লাসের সমস্ত সুবিধা দেয় কেন?
সেনসফুল

4
@ সেনসফুল আপনি ঠিক বলেছেন বাস্তব জীবনে, +allocএকটি একক কারখানার ক্লাস প্রদান করে যা বিভিন্ন -initWith:পদ্ধতি প্রয়োগ করে । ফ্যাক্টরি শ্রেণির -initWith:পদ্ধতিগুলি তখন প্রদত্ত পদ্ধতির পরামিতিগুলির উপর ভিত্তি করে একটি কংক্রিট সাবক্লাস বরাদ্দকরণ এবং প্রারম্ভিককরণের জন্য দায়ী, যদি প্রয়োজন হয় বা কিছু ক্ষেত্রে কিছু বরাদ্দ নাও করতে পারে (যেমন -[NSString initWithString:])। আপনি ফেরত মূল্য এ পরিদর্শন দ্বারা এটা চেষ্টা করতে পারেন +[NSString alloc], +[NSArray alloc]ইত্যাদি
ড্যারেন

25

গ্লসারি, ক্লাস্টারে 498 পৃষ্ঠায় স্টিফেন কোচানের উদ্দেশ্য সি তে প্রোগ্রামিং থেকে:

একটি বিমূর্ত শ্রেণি যা প্রাইভেট কংক্রিট সাবক্লাসগুলির একটি গোষ্ঠী বিভক্ত করে, বিমূর্ত শ্রেণীর মাধ্যমে ব্যবহারকারীকে সরলীকৃত ইন্টারফেস সরবরাহ করে।


4
+1 কোনও উদ্দেশ্য-সি বইয়ের উত্তর উদ্ধৃত করার জন্য, বিশেষত মূল প্রশ্নটি দেওয়া হয়েছে। এটিও একটি ভাল বই।
কুইন টেলর

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

18

ক্লাস ক্লাস্টারগুলি কংক্রিট, প্রাইভেট সাবক্লাস বাস্তবায়নের একটি গ্রুপকে একটি একক পাবলিক ইন্টারফেস সরবরাহ করে। একটি উদ্দেশ্য-সি প্রোগ্রামার ক্লাস ক্লাস্টারগুলি প্রায়শই ব্যবহার করে এবং খুব কমই এটি উপলব্ধি করে - এবং এটি একটি ক্লাস ক্লাস্টারের পুরো পয়েন্ট। ক্লাস ক্লাস্টারের কাজ হ'ল পাবলিক ইন্টারফেসের পিছনে বাস্তবায়নের বিশদটি জটিলতা hide

ফাউন্ডেশন ক্লাসগুলির অনেকগুলি ক্লাস ক্লাস্টার যেমন এনএসএসস্ট্রিং, এনএসআরাই, এনএসডি অভিধান এবং এনএসবার্বার। আপনি যখন [NSString stringWithFormat:]ক্লাস ক্লাস্টার কল করবেন তখন আপনাকে কিছু কংক্রিট শ্রেণি দিচ্ছে যা NSStringইন্টারফেস প্রয়োগ করে । এটি একটি হতে পারে NSConcreteString, NSCFString, NSFooBarString, ইত্যাদি কোন ক্লাসে ক্লাস্টার আপনি কন্সট্রাকটর উপর ভিত্তি করে অথবা আপনি আহ্বান করা হয় এবং আর্গুমেন্ট সূচনাকারী হয় দেয়।

এর কারণে, ক্লাস ক্লাস্টারগুলি উদ্দেশ্য-সি প্রোগ্রামিংয়ের অন্যতম ক্ষমতায়ন ধারণা।

  • কার্যকর করা খুব সহজ
  • কোডটি যেটিকে কল করে তা পরিবর্তন না করে অন্তর্নিহিত বাস্তবায়ন পরিবর্তন করা সহজ।
  • রানটাইমে বিভিন্ন কংক্রিট বাস্তবায়ন সরবরাহ করা সহজ (উদাহরণস্বরূপ পরীক্ষার সংস্থানসমূহ বা মক অবজেক্ট)
  • উপরের কারণে, পরীক্ষা করা সহজ এবং চুল্লী

আপনি যদি অন্য ভাষা থেকে আগত হন তবে আপনি গ্যাং অফ ফোরের নিদর্শনগুলির সাথে পরিচিত হতে পারেন। ক্লাস ক্লাস্টারে বিমূর্ত কারখানা এবং ফ্যাসাদ ধরণ উভয়ের উপাদান রয়েছে।

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

কোকো কোর প্রতিযোগিতা: ক্লাস ক্লাস্টার

কোকো ফান্ডামেন্টাল গাইড: ক্লাস ক্লাস্টারস

কীভাবে আপনার নিজের ক্লাস ক্লাস্টারগুলি প্রয়োগ করতে হয় তার উদাহরণগুলি গিটহাবটিতে উপলব্ধ


7

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

NSArray, NSString এবং NSNumber হল এমন ক্লাস ক্লাস্টার যা আপনি প্রায়শই মুখোমুখি হন।


6
হাস্যকরভাবে, অনুশীলনে, প্রতি ক্লাস্টারে কেবল একটি কংক্রিট শ্রেণি আর কখনও ব্যবহার করা হয় - এনএসসিএফ {অ্যারে | স্ট্রিং | নম্বর} - এবং বাস্তবায়ন পরিবর্তনগুলি সেই শ্রেণীর অভ্যন্তরীণ। এটি যতদূর আমি জানি, যাই হোক না কেন। এমনকি এনএসআরএ এবং এনএস মিউটেবলআরারি দৃষ্টান্তগুলি একই বর্গ দেখায়।
চক

4
@ চক - এটি কীভাবে হতে পারে? যদি কোনও এনএসমিটেবেল অ্যারে এবং এনএসআরাই একই শ্রেণি হিসাবে নিজেদের বলে দেয় [myArray isKindOfClass:[NSMutableArray class]]তবে তা না করা সত্ত্বেও হ্যাঁ ফেরত দেবে না?
রবার্ট

4
@ রবার্ট: এবং আমার মন্তব্যের সময় সত্যই তা ছিল। আজকাল অ্যাপল এনএসসিএফএরএকে __NSArrayM এবং __NSArrayI এর সাথে প্রতিস্থাপন করেছে, তাই আমি মনে করি এটি আর নেই, তবে আমি এখনও এর উপর নির্ভর করে স্বাচ্ছন্দ্য বোধ করব না, কারণ তারা সর্বদা এটি আবার পরিবর্তন করতে পারে।
ছক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.