বিভাগ এবং শ্রেণিবদ্ধকরণের মধ্যে পার্থক্য?


85

একটি বিভাগ এবং শ্রেণিবদ্ধকরণের মধ্যে পার্থক্য কী। আমি বিশ্বাস করি যে বিদ্যমান ক্লাসগুলিতে উভয়ই কাস্টম পদ্ধতি যুক্ত করতে ব্যবহৃত হয়। কেউ কি এ বিষয়ে আলোকপাত করতে পারে? কোড সহ পরীক্ষার সত্যই প্রশংসা করা হবে।



4
আকুসেটে, পৃষ্ঠাটি পাওয়া যাবে না।
আদিল হুসেন

এখানে স্পষ্টরূপে চিত্রিত, code.tutsplus.com
টিউটোরিয়ালস

উত্তর:


103

বিদ্যমান বিভাগে পদ্ধতি যুক্ত করার একটি উপায় হল একটি বিভাগ। তারা সাধারণত "এনএসভিউ + কাস্টম অ্যাডিশনস।" (এবং। মি। অবশ্যই) "ক্লাস + বিভাগের নাম।" নামে থাকা ফাইলগুলিতে থাকে।

একটি শ্রেণীর প্রসার 2 মূল পার্থক্য ব্যতীত একটি বিভাগ:

  1. বিভাগটির কোনও নাম নেই। এটি এভাবে ঘোষণা করা হয়েছে:

    নিবন্ধ
    
    
    - (void) anAdditionalMethod;
    
    @শেষ
  2. এক্সটেনশনটির বাস্তবায়ন অবশ্যই ফাইলের প্রধান @ ইমপ্লিমেন্টেশন ব্লকে থাকতে হবে।

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


13
ক্লাস-এক্সটেনসিয়নে আপনি অভ্যন্তরীণ পাঠ্য লেখার জন্য কোনও (সর্বজনীন) পঠনযোগ্য সম্পত্তি থেকে বৈশিষ্ট্যগুলি ওভাররাইট করতে সক্ষম হন। এবং এলএলভিএম 1.5 এর পরে আপনি আরও বেশি কিছু করতে সক্ষম হবেন: আপনি এখন ক্লাস এক্সটেনশনে উদাহরণ ভেরিয়েবলগুলি ঘোষণা করতে পারেন যাতে তারা নিয়মিত ইন্টারফেস থেকে চলে যায়।
সর্বোচ্চ সলেমান

আপনি যখন ক্লাসে কেবল সেই পদ্ধতি এবং বৈশিষ্ট্যের স্ট্রেইট বাস্তবায়ন করতে পারলেন তখন কেন একটি শ্রেণিবদ্ধকরণ যুক্ত করবেন? আমার কাছে একটু অপ্রয়োজনীয় মনে হচ্ছে।
ব্যবহারকারী 1721803

4
@ ব্যবহারকারী 1721803 ডেভের পরামর্শ অনুসারে আপনি কয়েকটি সম্পত্তি / পদ্ধতি অব্যক্ত রাখতে চাইতে পারেন। এটি যখন এক্সটেনশনগুলি ব্যবহৃত হয়। একটি দৃষ্টিভঙ্গি বিবেচনা করুন, আপনি আপনার সমস্ত আইবিআউটলেট এবং আইবিএ ক্রমশ বর্ধিত করতে পারেন এবং এমন পদ্ধতিগুলি প্রকাশ করতে পারেন যা আউটলেটগুলি আরম্ভ করতে / আপডেট করতে দেয় এবং ক্রিয়াগুলি আবার অর্পণ করা যেতে পারে।
গুডএসপিএনডি 3 ই

@ ম্যাক্সসিলিমান আপনি কীভাবে একটি শর্ট স্ক্রিপ্ট দ্বারা "একটি (সর্বজনীন) পঠনযোগ্য সম্পত্তি অভ্যন্তরীণ পাঠ্যকারের জন্য" তৈরি করতে পারেন দয়া করে? ধন্যবাদ
অ্যালেনলিলি

এই উত্তরটি "ক্লাস + বিভাগনাম.সুইফ্ট" ফাইলটিতে বর্ধনের কথা জানায়, এটি কি ঠিক ??
রিতেশ.মিল্ক

47
  1. বিভাগ

=> উদ্দেশ্য সিতে, যখন আপনি উত্তরাধিকার ছাড়াই কোনও শ্রেণিতে আরও কিছু কার্যকারিতা যুক্ত করতে চান, আপনি কেবল এর জন্য বিভাগটি ব্যবহার করেন use

=> এটি নিজস্ব .h এবং .m ফাইলের সাথে আসে

=> Categoryবৈশিষ্ট্য নয় নতুন পদ্ধতি যুক্ত করতে ব্যবহার করে।

  1. ক্লাস এক্সটেনশন
-> In Objective C, when you want to make behaviour of some property private you use class extension.

-> it comes with **.h** file only.

-> mainly for properties.

দ্রষ্টব্য: যখন আমরা একটি নতুন ফাইল যুক্ত করি এবং উদ্দেশ্য সি বিভাগের বিকল্পগুলির বিভাগ নির্বাচন করি এবং "বিভাগের" নয় "সাবক্লাসের উপর" বিভাগ দেখায় তাই এটির মতো দেখায়

@interface className (categoryName)
@end

-আপনি দুটি ফাইল পাবেন .h এবং .m হিসাবে ফাইল নাম দিয়ে ( classname + + categoryName.h এবং classname + + categoryName.m )

এবং এক্সটেনশনের ক্ষেত্রে আপনি পাবেন

@interface className()
@end

- আপনি নামের সাথে কেবল একটি ফাইল পাবেন ক্লাসনেম_ এক্সটেনশননাম। H পাবে

  • বিভাগে আপনি শ্রেণীর মালিক নন তবে এক্সটেনশনে আপনি।

4
@ প্রসন্ন: ক্লাস এক্সটেনশানটি শুধুমাত্র এম। এম ফাইলের সাথে আসে এবং এইচ-তে নয়
স্যাগি

4
ক্লাস এক্সটেনশানটি শুধুমাত্র।
m

32
  1. বিভাগটি কোনও শ্রেণিতে পদ্ধতি যুক্ত করার একটি উপায় যা উত্স কোডটি উপলভ্য কিনা, অর্থাত আপনি যেমন ফাউন্ডেশন ক্লাসগুলিতে বিভাগ যুক্ত করতে পারেন NSString আপনার নিজের পছন্দমতো ক্লাসগুলির ।

    এক্সটেনশন কেবলমাত্র সেই ক্লাসগুলিতে যুক্ত করা যেতে পারে যার উত্স কোড উপলভ্য কারণ সংকলক একই সাথে উত্স কোড এবং এক্সটেনশান সংকলন করে।

  2. আমরা শ্রেণীর এক্সটেনশনে অতিরিক্ত উদাহরণ ভেরিয়েবল এবং বৈশিষ্ট্য যুক্ত করতে পারি তবে বিভাগে নয়।

  3. এক্সটেনশনের অভ্যন্তরের কোনও পরিবর্তনশীল এবং পদ্ধতি উত্তরাধিকার সূত্রে প্রাপ্ত শ্রেণিতেও অ্যাক্সেসযোগ্য নয়।

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

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


4
আমি অনেক উত্তর সহ 5 টি অনুরূপ প্রশ্ন পড়ি, এবং এটি সেরা। ধন্যবাদ!
মধু

4
আপনি পাশাপাশি বিভাগে বৈশিষ্ট্য যুক্ত করতে পারেন। @Pebby উত্তর দেখুন।
অতুলখাত্রি 3'17

7

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

বিভাগ : বিদ্যমান শ্রেণিতে সম্পত্তি না বলে আরও পদ্ধতি যুক্ত করতে এটি কাস্টম ক্লাস এবং অ্যাপল শ্রেণির উভয়ের জন্যই ব্যবহার করা যেতে পারে NSString


সহজ এবং মার্জিত। এটি চালিয়ে যান
আব্দুল ইয়াসিন

3

বিভাগ শ্রেণিতে সেট সম্পর্কিত সম্পত্তি ব্যবহার করে আমাদেরও সম্পত্তি থাকতে পারে।

@interface SomeClass (Private)

@property (nonatomic, assign) id newProperty;

@end

NSString * const kNewPropertyKey = @"kNewPropertyKey";

@implementation SomeClass (Private)

@dynamic newProperty;

- (void)setNewProperty:(id)aObject
{
    objc_setAssociatedObject(self, kNewPropertyKey, aObject, OBJC_ASSOCIATION_ASSIGN);
}

- (id)newProperty
{
    return objc_getAssociatedObject(self, kNewPropertyKey);
}

@end

দেখুন: http://inchoo.net/dev-talk/ios-de વિકાસment / how-to-add-a-property-via-class-category/


2
@interface SomeClass ()


- (void) anAdditionalMethod;


@end

আমি মনে করি এটি বিভাগ ঘোষণা করার উপায় নয়। বিভাগের একটি নাম থাকতে হবে

@interface SomeClass (XYZ)


- (void) anAdditionalMethod;


@end

উদাহরণ স্বরূপ

@interface NSMutableArray (NSMutableArrayCreation)

+ (id)arrayWithCapacity:(NSUInteger)numItems;
- (id)initWithCapacity:(NSUInteger)numItems;

@end

অ্যাপল NSMutableArray এর জন্য ঘোষণা করেছে


এভাবেই আপনি ঘোষণা করেন এবং বর্ধিত করেন, কোনও বিভাগ নয় -> @ অভ্যন্তরীণ সোমারক্লাস ()
চাভির

0

আইওএস এক্সটেনশান সি # এর সাথে একই, জাভা বিমূর্ত শ্রেণি বা ইন্টারফেস
আইওএস বিভাগে সি # এর সাথে একই, জাভা শ্রেণীর এক্সটেনশন


4
আপনার উত্তর ঠিক যেমন "বিড়াল বাঘের অনুরূপ, একজন অন্ধকে উত্তর দিচ্ছে"। লল
মুরুগানন্ধম কে

4
এটা আসলে না। আপনি যদি সি # বা জাভা জানেন তবে এটি সর্বাধিক প্রত্যক্ষ এবং দ্রুত ব্যাখ্যা।
80bbA

মোটেও খুব বর্ণনামূলক নয় এবং সবেমাত্র প্রশ্নের উত্তর দিয়েছি।
কেভিশ

0

বিভাগসমূহ

আপনি যখন প্রচুর পরিমাণে পদ্ধতিযুক্ত ফাইল তৈরি করছেন তখন বিভাগগুলি ব্যবহৃত হয় o সুতরাং তারা আপনাকে একটি একক শ্রেণিকে বিভিন্ন মডিউলে বিভক্ত করার সুবিধা সরবরাহ করে A এছাড়াও বিভাগগুলিতে কোনও পরিবর্তন করা হয় তবে সংকলক পুরো প্রকল্পটি সংকলন করতে সময় নষ্ট করে না .শ্রেণীতে নতুন ভেরিয়েবল বা বৈশিষ্ট্য যুক্ত করতে ও তাদের পিতামাত্ত শ্রেণীর সন্ধান করতে সক্ষম হয় না You আপনি কোনও বিভাগে কোনও পদ্ধতিকে ওভাররাইড করতে পারেন তবে এটি একটি ভাল ধারণা নয় কারণ এই পদ্ধতিটি আরও ওভাররাইড করা যায় না A এছাড়াও প্রবাহটি কার্যকর করা যেতে পারে কারণ সমস্ত বিভাগেই রয়েছে একই শ্রেণিবিন্যাসের স্তর এবং তাই একই প্যারেন্ট বর্গের অন্তর্ভুক্ত দুটি বিভাগ চলমান সময়ে উপস্থিত থাকতে পারে categoriesএছাড়াও সুরক্ষিত পদ্ধতি বিভাগ ব্যবহার করে তৈরি করা যেতে পারে

এক্সটেনশনগুলি

এক্সটেনশানগুলি আপনাকে সম্পত্তিটি ওভাররাইড করতে বা বিদ্যমান প্যারেন্ট ক্লাসে নতুন সম্পত্তি যুক্ত করতে সক্ষম করে y তাদের নাম নেই এমন বিভাগগুলির সাথে সিন্ট্যাটিকভাবে একই এবং @ অন্তর্গত শ্রেণি হিসাবে প্রতিনিধিত্ব করা হয় () কোন। এম ফাইল উপস্থিত নেই এবং এক্সটেনশনে ঘোষিত পদ্ধতিটি প্রয়োগ করতে হবে @ পিতামাতার ফাইলের বাস্তবায়ন

এই লিঙ্কে আরও সহায়তা


0

এখানে আমার বোঝার বিষয়:

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

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

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

বিভাগগুলি তৈরি করার সময় আপনার বন্ধনীগুলির মধ্যে এটির জন্য একটি নাম দেওয়ার কথা রয়েছে। তবে এক্সটেনশনের জন্য কোনও নামের দরকার নেই। তাই কিছু সময় এগুলিকে বেনামে বিভাগেও বলা হয়।


আপনি ট্র্যাক সামান্য দূরে।
আব্দুল ইয়াসিন 12

@iPhoneDeveloper আমরা পূর্বনির্ধারিত প্রকারের জন্য এক্সটেনশনটি লিখতে পারি। দয়া করে এই লিঙ্কটি পরীক্ষা করুন - stackoverflow.com/a/33942484/2060508
yo2bh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.