অবজেক্টিভ-সি: অ্যাপলের মূল ভাষা সম্পর্কে আপনার যা জানা দরকার

সর্বশেষ আপডেট: 19 2025 এর জুন
  • অবজেক্টিভ-সি হল একটি অবজেক্ট-ওরিয়েন্টেড ভাষা যা সি-এর এক্সটেনশন হিসেবে তৈরি করা হয়েছে এবং কয়েক দশক ধরে অ্যাপলের অ্যাপ তৈরিতে ব্যবহৃত হচ্ছে।
  • এটি তার নমনীয়তা, সি কোড এবং অবজেক্ট ওরিয়েন্টেশনের মিশ্রণ, লিগ্যাসি এপিআই এবং ফ্রেমওয়ার্কের সাথে সামঞ্জস্য এবং এর গতিশীল বার্তা ব্যবস্থার জন্য আলাদা।
  • এটি বর্তমানে অ্যাপল প্রকল্পগুলিতে সুইফটের সাথে সহাবস্থান করে এবং লিগ্যাসি অ্যাপ্লিকেশন এবং লাইব্রেরিগুলির রক্ষণাবেক্ষণ এবং আন্তঃকার্যক্ষমের জন্য অপরিহার্য।

অবজেক্টিভ-সি প্রোগ্রামিং ভাষা

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

এই আর্টিকেলে আমরা অবজেক্টিভ-সি বোঝার জন্য প্রয়োজনীয় সবকিছু নিয়ে আলোচনা করব : এর সবচেয়ে স্বতন্ত্র বৈশিষ্ট্য, এর উৎপত্তি, বর্তমানে এটি কোথায় ব্যবহৃত হয় এবং সুইফটের মতো বিকল্পগুলোর সাথে এর তুলনা। এর সিনট্যাক্স, গঠন এবং সক্ষমতা বোঝার জন্য আপনি বাস্তব উদাহরণও দেখতে পাবেন। এছাড়াও মেমরি ম্যানেজমেন্ট, অবজেক্ট-ওরিয়েন্টেড প্যারাডাইম, প্রোটোকল এবং আরও অনেক কিছুর মূল দিকগুলো সম্পর্কেও জানতে পারবেন। প্রস্তুত হয়ে যান, কারণ আমরা এই আকর্ষণীয় ভাষাটির প্রতিটি খুঁটিনাটি বিষয় নিয়ে আলোচনা করতে যাচ্ছি।

অবজেক্টিভ-সি কী?

অবজেক্টিভ-সি হলো একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা , যা সি ভাষাকে সম্প্রসারিত করার জন্য ডিজাইন করা হয়েছে। এটি সি ভাষাকে অবজেক্ট-ভিত্তিক ভাষাগুলোর, বিশেষ করে স্মলটক দ্বারা অনুপ্রাণিত ভাষাগুলোর, সাধারণ সক্ষমতা প্রদান করে। এর উৎপত্তি ১৯৮০-এর দশকে, ব্র্যাড কক্স এবং স্টেপস্টোন কর্পোরেশনের হাত ধরে। এর লক্ষ্য ছিল সি ভাষাকে স্মলটক-এর মতো একটি মেসেজিং সিস্টেম প্রদান করা, যা প্রোগ্রামিংয়ে অধিকতর নমনীয়তা এবং মডুলারিটি নিয়ে আসবে।

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

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

অবজেক্টিভ-সি এর ইতিহাস এবং বিবর্তন

অবজেক্টিভ-সি-এর উৎপত্তি ১৯৮০-এর দশকে খুঁজে পাওয়া যায়, যখন স্টেপস্টোন-এর সফটওয়্যার ডেভেলপার ব্র্যাড কক্স এবং টম লাভ, সি-তে স্মলটক-এর মতো সক্ষমতা যোগ করার প্রয়োজনীয়তা উপলব্ধি করেন। স্মলটক ছিল সেই সময়ে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এর প্রধান ভাষা। তাদের উদ্দেশ্য ছিল সি-এর শক্তি, গতি এবং জনপ্রিয়তার সাথে স্মলটক-এর নমনীয়তাকে একত্রিত করে এমন একটি হাইব্রিড ভাষা তৈরি করা, যা উভয় ভাষার সেরা বৈশিষ্ট্যগুলো প্রদান করবে।

এর প্রাথমিক সংস্করণটি ১৯৮৪ সালে প্রকাশিত হয়েছিল এবং পরবর্তীতে অ্যাপল থেকে স্টিভ জবসের সাময়িক প্রস্থানের পর প্রতিষ্ঠিত নেক্সট (NeXT)-এর মতো কোম্পানিগুলো এটি গ্রহণ করে। নেক্সট তাদের নেক্সটস্টেপ (NeXTSTEP) অপারেটিং সিস্টেমের প্রধান ভাষা হিসেবে অবজেক্টিভ-সি (Objective-C) অন্তর্ভুক্ত করে , যা ১৯৯০-এর দশকের শেষের দিকে অ্যাপল নেক্সটকে অধিগ্রহণ করার পর ম্যাকওএস (macOS) এবং আইওএস (iOS)-এ পরিণত হওয়া সিস্টেমের ভিত্তি স্থাপন করেছিল।

সেই থেকে, এবং প্রায় ত্রিশ বছর ধরে, অবজেক্টিভ-সি অ্যাপলের অপারেটিং সিস্টেমে সফ্টওয়্যার তৈরির জন্য অবিসংবাদিত মানদণ্ড। ২০১৪ সালে, অ্যাপল অ্যাপ ডেভেলপমেন্টের জন্য সুইফটকে তার নতুন রেফারেন্স ভাষা হিসেবে ঘোষণা করে, কিন্তু অবজেক্টিভ-সি ইকোসিস্টেমের একটি অপরিহার্য অংশ হিসেবে রয়ে গেছে, বিশেষ করে বিদ্যমান অ্যাপ্লিকেশনগুলি বজায় রাখার জন্য এবং এখনও স্থানান্তরিত হয়নি এমন লিগ্যাসি এপিআই এবং ফ্রেমওয়ার্ক অ্যাক্সেস করার জন্য।

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

অবজেক্টিভ-সি কীসের জন্য ব্যবহৃত হয়?

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

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

অবজেক্টিভ-সি-এর সবচেয়ে উল্লেখযোগ্য কিছু ব্যবহার হলো:

  • iOS এবং macOS এর জন্য নেটিভ অ্যাপ ডেভেলপমেন্ট: আজও, অ্যাপ স্টোরের বেশিরভাগ অ্যাপ আংশিক বা সম্পূর্ণরূপে অবজেক্টিভ-সি তে লেখা।
  • লিগ্যাসি অ্যাপল এপিআই অ্যাক্সেস করা: অনেক সিস্টেম বৈশিষ্ট্য শুধুমাত্র এই ভাষায় উপলব্ধ, যা দীর্ঘস্থায়ী প্রকল্পগুলি রক্ষণাবেক্ষণ এবং উন্নত করার জন্য এটিকে অপরিহার্য করে তোলে।
  • ফ্রেমওয়ার্ক এবং মালিকানাধীন লাইব্রেরি: দক্ষতা এবং সামঞ্জস্যের জন্য বৃহৎ উন্নয়ন দলগুলির জন্য অবজেক্টিভ-সি লাইব্রেরিগুলি বজায় রাখা সাধারণ।
  • GNUstep এবং অন্যান্য প্ল্যাটফর্মের সাথে সামঞ্জস্য: অ্যাপল ছাড়াও, GNUstep-এর মতো অন্যান্য বাস্তবায়নগুলি অ-অ্যাপল সিস্টেমগুলিতে অবজেক্টিভ-সি ব্যবহারের অনুমতি দেয়।
  অ্যালগোল প্রোগ্রামিং ভাষা: ১০টি গুরুত্বপূর্ণ দিক

অবজেক্টিভ-সি এর প্রধান বৈশিষ্ট্য

অবজেক্টিভ-সি এমন অনেক বৈশিষ্ট্য প্রদান করে যা প্রোগ্রামারদের কাছে, বিশেষ করে যারা সি প্রোগ্রামিং থেকে এসেছেন, তাদের কাছে অত্যন্ত মূল্যবান। অন্যান্য ভাষার তুলনায় কী এটিকে অনন্য করে তোলে, তা বোঝার জন্য নিচে সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্যগুলো পর্যালোচনা করা হলো:

  • বস্তু-ভিত্তিক ভাষা: সবকিছুই বস্তুর চারপাশে ঘোরে, যা শ্রেণী, উত্তরাধিকার, পলিমরফিজম এবং এনক্যাপসুলেশনের সংজ্ঞা, সেইসাথে স্পষ্ট কোড বিভাজনের অনুমতি দেয়।
  • C এর সুপারসেট: এটি C এর সমস্ত কার্যকারিতা সংরক্ষণ করে, ঐতিহ্যবাহী নির্দেশ সেট অন্তর্ভুক্ত করার অনুমতি দেয় (যেমন while, for, do-while) এবং বস্তুর পাশাপাশি আদিম তথ্য পরিচালনা করে।
  • স্মলটক-স্টাইলের মেসেজিং: পদ্ধতির আহ্বান বস্তুগুলিতে বার্তা প্রেরণের মাধ্যমে সম্পাদিত হয়, যা উন্নয়নে দুর্দান্ত নমনীয়তা এবং গতিশীলতা প্রদান করে।
  • স্পষ্ট মেমরি ব্যবস্থাপনা: স্বয়ংক্রিয় মেমরি ব্যবস্থাপনার আধুনিক ভাষাগুলির বিপরীতে, অবজেক্টিভ-সি-তে প্রোগ্রামারকে প্রতিটি বস্তুর সৃষ্টি এবং প্রকাশ নিয়ন্ত্রণ করতে হয়, যদিও ২০১১ সাল থেকে ARC (অটোমেটিক রেফারেন্স কাউন্টিং) এর আগমনের সাথে সাথে, এই কাজটি উল্লেখযোগ্যভাবে সরলীকৃত হয়েছে।
  • সি লাইব্রেরি সাপোর্ট: এটি আপনাকে C তে লেখা লাইব্রেরিগুলি পুনরায় ব্যবহার করার অনুমতি দেয়, যা পুরানো কোডের একীকরণকে সহজতর করে এবং প্রয়োজনে কর্মক্ষমতা বৃদ্ধি করে।
  • প্রোটোকল এবং বিভাগগুলির জন্য সমর্থন: আপনি প্রোটোকল ব্যবহার করে বিমূর্ত ইন্টারফেস সংজ্ঞায়িত করতে পারেন, এবং বিভাগ ব্যবহার করে বিদ্যমান ক্লাসগুলিতে অতিরিক্ত পদ্ধতি যোগ করতে পারেন।

অবজেক্টিভ-সি বেসিক সিনট্যাক্স এবং স্ট্রাকচার

অবজেক্টিভ-সি-এর সিনট্যাক্স এর অন্যতম প্রধান বৈশিষ্ট্য, এবং যদিও প্রথম নজরে এটি অদ্ভুত মনে হতে পারে (বিশেষ করে মেসেজ পাঠানোর জন্য ব্র্যাকেট নোটেশন), একবার অভ্যস্ত হয়ে গেলে এটি বেশ যৌক্তিক এবং সহজবোধ্য। নিচে এর মূল উপাদানগুলো বিস্তারিতভাবে আলোচনা করা হলো:

  • চলক এবং আদিম প্রকারের ঘোষণা: ঠিক যেমন C তে, আপনি সহজ ভেরিয়েবল ঘোষণা করতে পারেন যেমন int, float o char. বস্তুর জন্য, চলকের নামের আগে একটি তারকাচিহ্ন ব্যবহার করা হয় (MyClass *objeto;).
  • বার্তা পাঠানো হচ্ছে: একটি বস্তুর একটি পদ্ধতি কল করতে, আপনি বন্ধনী সিনট্যাক্স ব্যবহার করেন: ;
  • ক্লাস এবং পদ্ধতি: একটি ক্লাসের সংজ্ঞা দুটি ফাইল নিয়ে গঠিত: ইন্টারফেস ফাইল (.h) এবং বাস্তবায়ন (.m). নির্দেশিকা ব্যবহার করা হয় @interface y @implementation.
  • বিশিষ্টতা: এগুলি দিয়ে সংজ্ঞায়িত করা হয়েছে @property এবং সাধারণত এর সাথে থাকে @synthesize স্বয়ংক্রিয়ভাবে গেটার এবং সেটার পদ্ধতি বাস্তবায়ন করতে।
  • ফ্লুজো নিয়ন্ত্রণ: ক্লাসিক C বিবৃতিগুলি উপস্থিত রয়েছে: if, else, switch, while, for.
  • সংগ্রহের ধরণ: তালিকার জন্য অবজেক্ট (NSArray, NSMutableArray), অভিধান (NSDictionary, NSMutableDictionary), এবং সেট (NSSet, NSMutableSet) আছে।

এই সিস্টেমটি ডেভেলপারদের কিছু সি লজিক উত্তরাধিকারসূত্রে পেতে দেয়, তবে বিমূর্ততা এবং মডুলারিটির একটি স্তর যুক্ত করে যা বৃহৎ প্রকল্পগুলিতে অত্যন্ত মূল্যবান।

ব্যবহারিক উদাহরণ: অবজেক্টিভ-সি-তে হ্যালো ওয়ার্ল্ড

চলুন দেখি Objective-C তে কনসোলে "Hello World" প্রিন্ট করার জন্য একটি মৌলিক উদাহরণ কেমন হবে:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"Hola Mundo");
    }
    return 0;
}

এই খণ্ডটিতে আমরা বেশ কয়েকটি উপাদান দেখতে পাই:

  • #আমদানি : অ্যাপলের মূল অবজেক্ট ফ্রেমওয়ার্ক আমদানি করে।
  • @অটোরিলিজপুল: অবজেক্ট মেমোরি ম্যানেজমেন্টের জন্য প্রয়োজনীয়, বিশেষ করে যখন ARC ব্যবহার না করা হয়।
  • এনএসলগ: কনসোলে তথ্য প্রদর্শনের ফাংশন, এর সমতুল্য printf C তে কিন্তু Objective-C তে অভিযোজিত।

অবজেক্টিভ-সি-তে অবজেক্ট-ওরিয়েন্টেড প্যারাডাইম

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

তাছাড়া, এর একটি অনন্য বৈশিষ্ট্য হলো অবজেক্টগুলোতে গতিশীলভাবে বার্তা পাঠানোর ক্ষমতা , যা রানটাইম অভিযোজনযোগ্যতাসহ অত্যন্ত নমনীয় প্রোগ্রাম তৈরিতে সহায়তা করে; এই ধারণাটি সরাসরি স্মলটক থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।

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

অবজেক্টিভ-সি-তে বিভাগ এবং এক্সটেনশন

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

  গিটহাব এবং রেডিটে কীভাবে দ্রুত মার্কডাউন ব্যবহার করবেন

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

অবজেক্টিভ-সি-তে প্রোটোকল

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

উদাহরণস্বরূপ, একটি প্রোটোকল পদ্ধতি নির্দিষ্ট করতে পারে যেমন turnOnEngine o beNiceToSister:, এবং বিভিন্ন শ্রেণী যদি সেই কার্যকারিতায় আগ্রহী হয় তবে তারা এই প্রোটোকলগুলি গ্রহণ করতে পারে।

মেমোরি ম্যানেজমেন্ট: রিটেন, রিলিজ এবং এআরসি

অবজেক্টিভ-সি-তে, মেমরি ম্যানেজমেন্ট ঐতিহ্যগতভাবে প্রোগ্রামারদের জন্য অন্যতম বড় একটি চ্যালেঞ্জ ছিল । এআরসি ( অটোমেটিক রেফারেন্স কাউন্টিং )-এর আবির্ভাবের আগে, প্রতিটি অবজেক্টের রিটেনশন এবং ডিঅ্যালোকেশন ম্যানুয়ালি নিয়ন্ত্রণ করতে হতো, যা মেমরি লিক এবং সহজে শনাক্ত করা যায় না এমন ত্রুটির ঝুঁকি বাড়িয়ে দিত।

মৌলিক চক্রটি হল:

  • অবজেক্ট তৈরি করুন (alloc).
  • বস্তুটি ব্যবহার করুন.
  • বস্তুটি ছেড়ে দিন (release o autorelease).

Xcode 4.2 এবং iOS 4-এ অন্তর্ভুক্ত ARC-এর মাধ্যমে, কম্পাইলার নিজেই স্বয়ংক্রিয়ভাবে retain , release , এবং autorelease নির্দেশাবলী যুক্ত করে , যা ডেভেলপারের কাজকে ব্যাপকভাবে সহজ করে এবং গার্বেজ কালেকশনের ক্ষেত্রে Objective-C-কে অন্যান্য ভাষার অভিজ্ঞতার কাছাকাছি নিয়ে আসে।

বৈশিষ্ট্য এবং বৈশিষ্ট্য: অ্যাক্সেস নিয়ন্ত্রণ এবং মেমরি

The অবজেক্টিভ-সি-তে বৈশিষ্ট্য দ্বারা ঘোষিত হয় @property এবং এর ব্যবস্থাপনা বিভিন্ন বৈশিষ্ট্যের মাধ্যমে শক্তিশালী করা হয়, যা প্রতিটি মান কীভাবে সংরক্ষণ এবং অ্যাক্সেস করা হয় তা নিয়ন্ত্রণ করে। প্রধান বৈশিষ্ট্যগুলি হল:

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

এই গ্র্যানুলারিটি ডেভেলপারদের রিসোর্স খরচ অপ্টিমাইজ করতে এবং মেমরি অ্যাক্সেস ত্রুটি এড়াতে সাহায্য করে।

তুলনা: অবজেক্টিভ-সি বনাম সুইফট

২০১৪ সাল থেকে অ্যাপল ইকোসিস্টেমের জন্য ডেভেলপমেন্টের ক্ষেত্রে অবজেক্টিভ-সি এবং সুইফট- এর সহাবস্থান একটি উল্লেখযোগ্য বৈশিষ্ট্য । উভয় ভাষারই নিজস্ব সুবিধা ও অসুবিধা রয়েছে এবং এর নির্বাচন মূলত প্রকল্পের ধরন ও ডেভেলপমেন্ট টিমের অভিজ্ঞতার ওপর নির্ভর করে।

অবজেক্টিভ-সি এর প্রধান সুবিধাগুলো হলো :

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

সুইফট, তার পক্ষ থেকে, অবদান রাখেন:

  • বৃহত্তর নিরাপত্তার নিশ্চয়তা: এর স্ট্যাটিক টাইপিং, ত্রুটি পরিচালনা এবং আধুনিক মেমরি ব্যবস্থাপনার জন্য ধন্যবাদ।
  • আরও স্পষ্ট এবং সংক্ষিপ্ত বাক্য গঠন: এটি কোড লেখা এবং রক্ষণাবেক্ষণকে সহজ করে তোলে, বিশেষ করে যারা C জগত থেকে আসেন না তাদের জন্য।
  • আধুনিক সরঞ্জাম: নেমস্পেস, খেলার মাঠের সাথে ইন্টারেক্টিভ ডেভেলপমেন্ট এবং কার্যকরী প্যাটার্নের জন্য চমৎকার সমর্থন।

ভবিষ্যতের দিকে তাকালে, সবকিছুই ইঙ্গিত দিচ্ছে যে সুইফট (Swift) তার অবস্থান আরও শক্তিশালী করবে, কিন্তু বড় আকারের লিগ্যাসি প্রজেক্টে এবং পুরোনো ফ্রেমওয়ার্কগুলোর সাথে আন্তঃকার্যক্ষমতার ক্ষেত্রে অবজেক্টিভ-সি (Objective-C) প্রাসঙ্গিক থাকবে ।

অবজেক্টিভ-সি বনাম সুইফটের সুবিধা এবং অসুবিধা

কিছু গুরুত্বপূর্ণ বিষয় পর্যালোচনা করা প্রয়োজন , যা একটি ভাষা বেছে নেওয়ার ক্ষেত্রে প্রভাব ফেলতে পারে:

  • উদ্দেশ্য গ:
    • আপনাকে C এবং C++ লাইব্রেরির সাথে দক্ষতার সাথে কাজ করার অনুমতি দেয়।
    • এটি গতিশীল বৈশিষ্ট্যগুলি অফার করে, যেমন মেথড সুইজলিং, যা আপনাকে রানটাইমে আচরণ পরিবর্তন করতে দেয়।
    • বিদ্যমান বাইনারি ফ্রেমওয়ার্ক এবং তৃতীয় পক্ষের লাইব্রেরির সাথে সামঞ্জস্যপূর্ণ।
    • তবে, এর একটি ছোট নেমস্পেস রয়েছে, যা বড় প্রকল্পগুলিতে দ্বন্দ্ব এবং ডিবাগ করা কঠিন ত্রুটির কারণ হতে পারে।
    • নতুন প্রোগ্রামারদের কাছে বাক্য গঠন জটিল এবং পুরানো মনে হতে পারে।
  • দ্রুত:
    • স্ট্যাটিক টাইপিং এবং আধুনিক সিনট্যাক্স নিরাপত্তা এবং উৎপাদনশীলতা বৃদ্ধি করে।
    • খেলার মাঠের সাথে কার্যকরী প্যাটার্ন এবং ইন্টারেক্টিভ কোড পরিচালনার জন্য উন্নত সহায়তা।
    • বৃহৎ প্রকল্পগুলিতে ধীরগতির সংকলন এবং মডিউল ফর্ম্যাটে কিছু অস্থিরতা বা C++ এর সাথে আন্তঃকার্যক্ষমতা।

ব্যবহারিক মৌলিক বিষয় এবং কোড উদাহরণ

যারা অবজেক্টিভ-সি-তে নতুন, তাদের জন্য বাস্তব-বিশ্বের প্রকল্পগুলিতে এর ব্যবহারের কিছু ব্যবহারিক উদাহরণ পর্যালোচনা করা সহায়ক হতে পারে। এখানে কিছু মূল কাঠামো এবং ধারণা দেওয়া হল:

  সিএসএস ফ্রেমওয়ার্ক: আপনার প্রকল্পের জন্য সেরাটি বেছে নেওয়ার জন্য একটি সম্পূর্ণ নির্দেশিকা

ক্লাস এবং পদ্ধতি ঘোষণা করা

// Archivo de cabecera: MyClass.h
#import <Foundation/Foundation.h>

@interface MyClass : NSObject
@property int contador;
- (void)incrementar;
@end
// Archivo de implementación: MyClass.m
#import "MyClass.h"

@implementation MyClass
- (void)incrementar {
    self.contador++;
}
@end

এই উদাহরণে, MyClass , NSObject থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছে , যা Cocoa-র বেশিরভাগ অবজেক্টের রুট ক্লাস।

অ্যারে এবং অভিধান ব্যবহার করা

NSArray *array = @;
NSString *elemento = array; // "dos"

NSDictionary *diccionario = @{ @"clave1": @"valor1", @"clave2": @"valor2" };
NSString *valor = diccionario; // "valor1"

লুপ এবং নিয়ন্ত্রণ কাঠামো

for (int i = 0; i < 5; i++) { NSLog(@"Iteración %d", i); } if (array.count > 2) {
    NSLog(@"El array tiene más de dos elementos");
}

ক্লাসিক মেমোরি ম্যানেজমেন্ট (ARC ছাড়া)

MyClass *objeto =  init];
// Se usa el objeto
; // Liberar cuando termine de usarse

সামঞ্জস্যতা এবং সমর্থিত প্ল্যাটফর্মগুলি

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

অ্যাপলের মধ্যে, অবজেক্টিভ-সি ম্যাকওএস, আইওএস, আইপ্যাডওএস, টিভিওএস এবং ওয়াচওএসের সমস্ত আধুনিক সংস্করণে সমর্থিত এবং এক্সকোড এবং কমান্ড-লাইন উভয় সরঞ্জামেই এটি একটি কার্যকর বিকল্প।

অবজেক্টিভ-সি রিসোর্স এবং লার্নিং

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

প্রশিক্ষণের জন্য সবচেয়ে সাধারণ বিকল্পগুলির মধ্যে রয়েছে:

  • ব্যাখ্যামূলক ভিডিও।
  • ই-বই এবং ব্যবহারিক ম্যানুয়াল।
  • ধাপে ধাপে টিউটোরিয়াল, টেক্সট এবং ভিডিও উভয়ই।
  • অনলাইন ডেভেলপার সম্প্রদায় এবং প্রযুক্তিগত ফোরাম।
  • বেসিক থেকে অ্যাডভান্স লেভেল পর্যন্ত বিশেষায়িত প্ল্যাটফর্মের উপর কোর্স।

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

আজই অবজেক্টিভ-সি কেন শিখবেন?

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

তাছাড়া, iOS এবং macOS ডেভেলপমেন্টের অনেক ক্ষেত্রে Objective-C একটি প্রযুক্তিগত মানদণ্ড হিসেবে রয়ে যাওয়ায়, চাকরির বাজারে এর প্রাসঙ্গিকতা নিশ্চিত হয়, বিশেষ করে উচ্চপদস্থ পদ এবং আর্কিটেকচারাল বা টেকনিক্যাল লিডারশিপের মতো ভূমিকাগুলোর জন্য।

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

OOP-তে উত্তরাধিকার
সম্পর্কিত নিবন্ধ:
২০২৪ সালে সর্বাধিক ব্যবহৃত প্রোগ্রামিং ভাষা