সিটিকে কেন 'অবজেক্ট-ওরিয়েন্টেড' ভাষা হিসাবে বিবেচনা করা হয় না?


92

এটি দেখে মনে হয় যে সি এর নিজস্ব স্ট্রাক্ট-অবজেক্টস রয়েছে যেমন 'স্ট্রাক্টস' যা বস্তু হিসাবে বিবেচিত হতে পারে (উচ্চ-স্তরের উপায়ে যা আমরা সাধারণত চিন্তা করি)।

এবং এছাড়াও, সি ফাইলগুলি নিজেরাই মূলত পৃথক "মডিউল", তাই না? তাহলে মডিউলগুলিও 'অবজেক্টস' এর মতো নয়? সি, যেটি সি ++ এর সাথে খুব সমান বলে মনে হচ্ছে তা নিয়ে আমি বিভ্রান্ত হয়ে পড়েছি কেন সি ++ হিসাবে উচ্চ-স্তরের "অবজেক্ট-ভিত্তিক" হিসাবে নিম্ন-স্তরের "পদ্ধতিগত" ভাষা হিসাবে বিবেচিত হয়

* সম্পাদনা: (স্পষ্টকরণ) কেন এবং কোথায় লাইন আঁকানো হয়, একটি 'অবজেক্ট' কীসের জন্য, এবং তা নয়?


40
সব - নিচে ভোট কেন? এটি একটি প্রাথমিক প্রশ্ন তবে খারাপ নয়।
জন হপকিন্স

7
আপনি সি তে কার্যকরভাবে ওও নীতিগুলি ব্যবহার করতে পারেন (এবং ভাল সি কোড লেখার লোকেরা সাধারণত করেন) তবে আরও সহজলভ্য ভাষাগুলি হওয়ায় ভাষাটিকে সহজ করে তোলার পক্ষে তৈরি করা হয়নি।
asveikau

5
সি সহজেই ডেটা বিমূর্তনের কাছে আলাদা, সহজ এবং (সত্য বলতে সত্য) আরও সংজ্ঞায়িত (কমপক্ষে ওপেন সোর্স সম্প্রদায়ের মধ্যে) রয়েছে। সি ++ অ্যাবস্ট্রাকশন পাওয়ার হাউস হয়ে থাকে এবং অনেক দুর্দান্ত জিনিসের অনুমতি দেয়, তবে কীভাবে এগুলি সঠিকভাবে ব্যবহার করতে হবে না [তা] বোঝার জন্য ব্যয় হয় যা সাধারণ প্রোগ্রামগুলিতে প্রায়শই না পাওয়া যায়। আরও তথ্যের জন্য আমার সম্পূর্ণ উত্তর দেখুন।
ইয়াম মার্কোভিচ

1
সংক্ষেপে: স্ট্রাক্টগুলির কোনও পদ্ধতি থাকতে পারে না। (কোনও ফাংশনের পয়েন্টারটি এটি পুরোপুরি কাটবে না)।
এসএফ

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

উত্তর:


101

দেখে মনে হয় সি এর নিজস্ব আধা-বস্তু যেমন 'স্ট্রাক্টস' যা বস্তু হিসাবে বিবেচিত হতে পারে

আসুন আপনি এবং আমি উইকিপিডিয়া পৃষ্ঠার মাধ্যমে অবজেক্ট অরিয়েন্টেড প্রোগ্রামিংয়ে পড়ি এবং সি-স্টাইল স্ট্রাক্টের বৈশিষ্ট্যগুলি যা যা allyতিহ্যগতভাবে অবজেক্ট-ওরিয়েন্টেড স্টাইল হিসাবে বিবেচিত হয় তার সাথে মিল রাখি:

(OOP) হ'ল "অবজেক্ট" ব্যবহার করে একটি প্রোগ্রামিং দৃষ্টান্ত - ডেটা ক্ষেত্র এবং পদ্ধতিগুলির সাথে তাদের মিথস্ক্রিয়াগুলির সাথে ডেটা স্ট্রাকচার using

সি স্ট্রাক্টগুলি কি ক্ষেত্র এবং পদ্ধতিগুলি তাদের মিথস্ক্রিয়াগুলির সাথে একত্রে গঠিত ? না।

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

সি স্ট্রাক্টগুলি "ফার্স্ট ক্লাস" উপায়ে এর মধ্যে যে কোন একটি কাজ করে? না। ভাষা প্রতিটি ধাপে আপনার বিরুদ্ধে কাজ করে।

বস্তু-ভিত্তিক দৃষ্টিভঙ্গি প্রোগ্রামারটিকে এমন ডেটা স্থাপনে উত্সাহ দেয় যেখানে এটি প্রোগ্রামের বাকী অংশগুলির দ্বারা সরাসরি অ্যাক্সেসযোগ্য হয় না

সি স্ট্রাক্টগুলি কি এটি করে? না।

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

সি স্ট্রাক্টগুলি কি এটি করে? হ্যাঁ.

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

না।

প্রতিটি বস্তু বার্তাগুলি গ্রহণ, ডেটা প্রক্রিয়াকরণ এবং অন্যান্য বস্তুগুলিতে বার্তা প্রেরণে সক্ষম

কোনও কাঠামো নিজেই বার্তা প্রেরণ ও গ্রহণ করতে পারে? না এটি ডেটা প্রক্রিয়া করতে পারে? না।

ওওপি ডেটা স্ট্রাকচারগুলি "তাদের নিজস্ব অপারেটরদের সাথে রাখে"

এটি কি সি-তে ঘটে? না।

ডায়নামিক প্রেরণ ... এনক্যাপসুলেশন ... সাব টাইপ পলিমॉर्फিজম ... উত্তরাধিকার অবজেক্ট করুন ... পুনরাবৃত্তি খুলুন ... বস্তুর শ্রেণি ... শ্রেণির উদাহরণ ... যে পদ্ধতিগুলি সংযুক্ত বস্তুগুলিতে কাজ করে ... বার্তা প্রেরণ .. বিমূর্ততা

সি স্ট্রাক্টগুলির এই বৈশিষ্ট্যগুলি কি কোনও? না।

স্ট্রাক্টের কোন বৈশিষ্ট্যগুলি আপনি "অবজেক্ট ওরিয়েন্টেড" বলে মনে করেন? কারণ আমি স্ট্রাক্টগুলি টাইপ সংজ্ঞায়িত করা ব্যতীত অন্য কোনও সন্ধান করতে পারি না ।

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

এবং এছাড়াও, সি ফাইলগুলি নিজেরাই মূলত পৃথক "মডিউল", তাই না? তাহলে মডিউলগুলিও 'অবজেক্টস' এর মতো নয়?

আবার, আপনি মডিউলগুলির কী বৈশিষ্ট্যগুলি ভাবছেন যা তাদেরকে বস্তুর মতো কাজ করে? মডিউলগুলি কি বিমূর্তি, এনক্যাপসুলেশন, বার্তা, মডুলারালিটি, বহুকর্ম এবং উত্তরাধিকারকে সমর্থন করে?

বিমূর্ততা এবং এনক্যাপসুলেশন বেশ দুর্বল। স্পষ্টতই মডিউলগুলি মডুলার; এ কারণেই তাদের মডিউল বলা হয়। মেসেজিং? কেবল এই অর্থে যে কোনও মেথড কল একটি বার্তা এবং মডিউলগুলিতে পদ্ধতি থাকতে পারে। পলিমরফিজ্ম? নাঃ। উত্তরাধিকার? নাঃ। মডিউলগুলি "অবজেক্টস" এর পক্ষে বেশ দুর্বল প্রার্থী।


15
আমি একমত নই যে "এমুলেটিং সি ++" (আপনার শব্দটি) মূর্তিমানিক সি নয় One একটি পাল্টা উদাহরণ হ'ল কোনও ওএস কার্নেল সাধারণত ফাইল অপারেশনগুলি কীভাবে প্রয়োগ করে - লিনাক্সকে উদাহরণ হিসাবে গ্রহণ করুন, যেখানে আপনার ফাংশন পয়েন্টারে পূর্ণ স্ট্রাক্ট রয়েছে। তারা কিছুটা "ডোমেন-নির্দিষ্ট" আইডিয়াম হতে পারে (* নিক্সে ড্রাইভার লিখতে সীমাবদ্ধ, বলুন) তবে তারা স্বীকৃত এবং কিছু উদ্দেশ্যে পরিষ্কারভাবে কাজটি করে। ব্যবহারকারী মোড লাইব্রেরির কয়েকটি উদাহরণ রয়েছে যা ওওর কিছু ধারণা যথেষ্ট পরিমাণে কার্যকর করে; Gtk + এবং এটি নির্ভর করে গ্রন্থাগারগুলি নিন। এটিকে হ্যাকি বলুন এবং আপনি সঠিক হতে পারেন, তবে এগুলি কাজ করা ভয়ঙ্কর নয়
asveikau

5
@ আসভেইকাউ: কোনও অনুশীলন অস্বাভাবিক (এমনকি শুনে না থাকলেও) এবং "হ্যাকি" এই ধারণার অর্থ কি এই নয় যে এটি সংজ্ঞা দিয়ে, মূর্খ নয়?
অ্যাডাম রবিনসন

19
@ আসভিকাউ: অবশ্যই, সি প্রোগ্রামগুলিকে আরও বেশি OO করে তুলতে আপনি করতে পারেন এমন কিছু জিনিস রয়েছে। তবে আপনি যেমন বলেছেন, এটি করার জন্য এটির জন্য শৃঙ্খলা দরকার; ভাষা বৈশিষ্ট্যগুলি এগুলি স্বয়ংক্রিয়ভাবে আপনাকে encapsulation, বহুবর্ষ, শ্রেণির উত্তরাধিকার ইত্যাদির দিকে নিয়ে যায় না। বরং, বিকাশকারী ভাষাটির উপর সেই ধরণ চাপিয়ে দিতে পারেন। এর অর্থ এই নয় যে স্ট্রাক্টগুলি যুক্তিযুক্তভাবে বস্তুর মতো একই জিনিস। হেক, আপনি লিস্পেও ওও স্টাইলে প্রোগ্রাম করতে পারেন, তবে এর অর্থ এই নয় যে কনস কোষগুলি বস্তু।
এরিক লিপার্ট

3
@ আসভিকৈ, আমি কি পরামর্শ দিতে পারি যে আপনার "মূর্খ" এর "" নিজের "হিসাবে ব্যাখ্যাটি হালকাভাবে ... মূর্খতা? :)
বেনজল

8
@ বিল্ক: স্ট্রাক্টস সি সি কোড থাকতে পারে না স্ট্রোক্টে ফাংশন পয়েন্টার থাকতে পারে যা ডেটা । ফাংশন পয়েন্টারগুলি কোড নয় । কোড প্রোগ্রামার দ্বারা তৈরি একটি পাঠ্য শৈল্পিক।
এরিক লিপার্ট

46

মূল শব্দটি "ওরিয়েন্টেড", "অবজেক্ট" নয়। এমনকি সি ++ কোড যা অবজেক্ট ব্যবহার করে তবে স্ট্র্টের মতো ব্যবহার করে সেগুলি অবজেক্ট অরিয়েন্টেড নয়

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

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


2
+1 আমাদের সি নির্দেশ করার জন্য ওও হতে পারে। এটি সুবিধাজনক নয়, তবে এটি করা যেতে পারে।
ডায়েটবুদ্ধ

ভিবিএতে অবজেক্ট তৈরি করা সহজতর, তবে আমি এটিকে 'ওরিয়েন্টেড' হিসাবে বিবেচনা করব না।
জেফো

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

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

1
@ কাইলবেন এই টেবিলের মধ্যে এসকিউএল কোড সংরক্ষণ করা খুব বেশি পরিমাণে হবে না এবং তারপরে এক্সট্রাক্ট এবং এক্সিকিউট করা (টেবিলটিকে আপনার অবজেক্ট তৈরি করা) এটি একটি আকর্ষণীয় পরীক্ষা হবে। আসলে এটি কিছুটা লোভনীয় ...
বিল কে

19

অত্যন্ত উচ্চ স্তরের প্রিন্সিপালের ভিত্তিতে:

একটি বস্তু হ'ল তথ্য এবং আচরণের সাথে একটি আন্তঃসংযোগযুক্ত পদ্ধতিতে এমন একটি পুরোপুরি কাজ করে যা একাধিকবার ইনস্ট্যান্টিয়েট হতে পারে এবং যদি আপনি বাহ্যিক ইন্টারফেস জানেন তবে একটি ব্ল্যাক বক্স হিসাবে কাজ করেন।

স্ট্রাক্টে ডেটা থাকে তবে কোনও আচরণ নেই এবং তাই অবজেক্ট হিসাবে বিবেচনা করা যায় না।

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

এবং উত্তরাধিকার এবং বহুবিজ্ঞানে beforeোকার আগেই ...


মডিউলগুলিতে আচরণ এবং ডেটা কীভাবে সম্পর্কিত নয়? মডিউলটির ভিতরে থাকা ডেটাগুলিতে সদস্যরা মূলত 'আচরণ' করে না?
অন্ধকার টেম্পলার

4
সমস্যাটি হ'ল এগুলি এনক্যাপসুলেটেড নয়, এমন নয় যে তারা সম্পর্কিত নয়।
ইয়োন ক্যারল

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

1
@ ডার্ক টেম্পলার - ইইন যা বলেছিল ... এটি সম্পর্কের প্রকৃতির। আপনি কোথায় থেকে আসছেন তা আমি দেখতে পাচ্ছি - আপনি অবশ্যই মডিউলটির মধ্যে স্ট্রাক্টগুলি এমনভাবে ব্যবহার করতে পারেন যা এটি ওওর খুব প্রাথমিক উপাদানগুলিকে অনুকরণ করেছিল তবে আপনি যা করছেন তা বেশিরভাগই একটি সেটটিতে লেগে থাকা প্রোগ্রামারের উপর নির্ভর করবে would ভাষা প্রয়োগের পরিবর্তে স্ব-আরোপিত বিধিবিধানগুলি। আর কেন বিরক্ত করবেন? আপনি ওওর কোনও সুবিধা পাচ্ছেন না - উদাহরণস্বরূপ কোনও উত্তরাধিকার নেই - এবং আপনি নিজেকে সীমাবদ্ধ করছেন।
জন হপকিনস

এটি সঠিক হিসাবে চিহ্নিত চিহ্নের চেয়ে ভাল উত্তর।
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

6

"স্ট্রাক্ট" কেবলমাত্র ডেটা। "অবজেক্ট অরিয়েন্টেশন" এর স্বাভাবিক দ্রুত এবং নোংরা পরীক্ষাটি হ'ল: "এমন কোনও কাঠামো রয়েছে যা কোড এবং ডেটাকে একক ইউনিট হিসাবে এনক্যাপুলেটেড করার অনুমতি দেয়?" সি এটি ব্যর্থ হয় এবং তাই প্রক্রিয়াগত। সি ++ এই পরীক্ষায় পাস করে।


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

@ ব্রায়ান নোব্লাচ: কিন্তু কোনও সি ফাইল নিজেই ডেটা এবং কোডের encapsulation নয় ??
অন্ধকার টেম্পলার

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

অনুবাদ ইউনিট? >। <
অন্ধকার টেম্পলার

@Dark টেম্পলাররা: একটি অনুবাদ ইউনিট একটি উৎস ফাইল প্লাস কিছু #includeতা ডি, এবং বিয়োগ কিছুই দ্বারা সরানো শর্তসাপেক্ষে অন্তর্ভুক্ত করা হচ্ছে ( #if, #ifdef, এবং করা)।
ডেভিড থর্নলে

5

সি, সি ++ এর মতোই ডেটা বিমূর্ততা সরবরাহ করার ক্ষমতা রাখে যা এর আগে বিদ্যমান বস্তু-ভিত্তিক-প্রোগ্রামিং দৃষ্টান্তের একটি প্রতিমা।

  • সি স্ট্রাক্টের ডেটা থাকতে পারে (এবং এটিই তাদের মূল উদ্দেশ্য)
  • সি স্ট্রাক্টগুলি ফাংশন পয়েন্টারগুলিকে ডেটা হিসাবে সংজ্ঞায়িত করতে পারে
  • সি স্ট্রাক্টগুলি প্রায়শই পদ্ধতির মতো তাদের সাথে যুক্ত ফাংশনগুলির একটি সেট থাকতে পারে, কেবলমাত্র এই পয়েন্টারটি স্পষ্টভাবে পাস করা হয় না, তবে আপনাকে অবশ্যই নির্দিষ্ট স্ট্রাক্ট পরিচালনা করার জন্য ডিজাইন করা প্রতিটি পদ্ধতির প্রথম যুক্তি হিসাবে এটি স্পষ্টভাবে নির্দিষ্ট করতে হবে। C ++ আপনার জন্য স্বয়ংক্রিয়ভাবে এটি করে, আপনি যখন ক্লাস / স্ট্রাক্ট পদ্ধতি নির্ধারণ এবং কল করেন তখনই both

সি ++ এ ওওপি ডেটা বিমূর্ত করার উপায়গুলি প্রসারিত করে। কেউ কেউ বলে এটি ক্ষতিকারক , অন্যরা সঠিকভাবে ব্যবহার করার সময় এটি একটি ভাল সরঞ্জাম হিসাবে বিবেচনা করে।

  • সি ++ এই পয়েন্টারটিকে প্রচ্ছন্ন করে তোলে যতক্ষণ না প্রকারটি (কমপক্ষে আংশিকভাবে) চিহ্নিত করা যায় ততক্ষণ "শ্রেণি / কাঠামোর পদ্ধতিগুলিতে" ব্যবহারকারীকে এটি পাস করার প্রয়োজন হয় না।
  • সি ++ আপনাকে নির্দিষ্ট পদ্ধতিতে (শ্রেণি ফাংশন) অ্যাক্সেসকে সীমাবদ্ধ করতে দেয় এবং তাই আরও "ডিফেন্সিভ প্রোগ্রামিং" বা "ইডিয়ট-প্রুফিং" এর অনুমতি দেয়।
  • সি ++ প্রবর্তন করে শক্তিশালী প্রকারের সুরক্ষা সরবরাহ করে বিমূর্তিগুলিকে উত্সাহ দেয়
    1. নতুন পরিবর্তে অপারেটর যদি malloc + + ঢালাই
    2. অকার্যকর পয়েন্টারগুলির পরিবর্তে টেম্পলেটগুলি
    3. ম্যাক্রোর পরিবর্তে টাইপ করা মানগুলি প্রাপ্ত ইনলাইন ফাংশন
    4. পলিমারফিজমে অন্তর্নির্মিত যা আপনাকে নিজেকে প্রয়োগ করতে হবে না, এটি আপনাকে বিমূর্ত স্তরক্রম , চুক্তি এবং বিশেষত্ব তৈরি করতে দেয় ।

যাইহোক, আপনি অনেক সি "হ্যাকার" প্রচার করতে পারেন যে সি কীভাবে সঠিক পরিমাণে বিমূর্ততার সঠিকভাবে সক্ষম এবং সি ++ এর দ্বারা তৈরি ওভারহেড কীভাবে কেবল আসল সমস্যাটি সমাধান করা থেকে তাদের বিরক্ত করে।

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

অন্যরা অসুবিধাগুলির পাশাপাশি উভয় সুবিধা গ্রহণ করে আরও সুষম উপায়ে এটি দেখার প্রবণতা দেখায়।

সি নিজেকে পায়ে গুলি করা সহজ করে তোলে; সি ++ এটি আরও শক্ত করে তোলে তবে আপনি যখন এটি করেন তখন আপনার পুরো পাটি বন্ধ করে দেয়। - বাজার্ন স্ট্রস্ট্রপ


2

আপনার মুদ্রার অন্য দিকটি দেখতে হবে: সি ++।

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

"প্রকৃত" অবজেক্টগুলির সাথে আমাদের সদস্যদের উদাহরণস্বরূপ আড়াল করা দরকার, অথবা আমরা একটি বাস্তব "একটি" সম্পর্ক এবং আরও অনেকের সাথে উত্তরাধিকার পেতে পারি।

নীচে কমেন্টগুলি পড়ার পরে: আচ্ছা ঠিক আছে যে (প্রায়) সি দিয়ে সব কিছু করা যায় (যা সর্বদা সত্য) তবে প্রথম নজরে আমি ভেবেছিলাম যে প্রোগ্রামটি ডিজাইনের সময় সি ++ থেকে আলাদা করে করা কি আপনার ভাবনা।

একমাত্র যে বিষয়টি সত্যই পার্থক্য করে তা হ'ল সংকলক দ্বারা নীতিমালা চাপানো । যেমন খাঁটি ভার্চুয়াল ফাংশন, এবং যেমন। তবে এই উত্তরটি কেবলমাত্র প্রযুক্তি সংক্রান্ত সমস্যার সাথে সম্পর্কিত হবে তবে আমি মনে করি যে মূল কোডটি যখন আপনি কোড করবেন তখন মূলত পার্থক্যটি (যেমন বলা হয়েছে) যেহেতু সি ++ আপনাকে ওওপি করার পরিবর্তে এই জাতীয় কাজগুলি করার জন্য সিনট্যাক্সে আরও ভাল তৈরি করে gives কিছুটা আনাড়ি উপায় সি।


সত্যিই নিশ্চিত নয় যে "ফাংশনগুলির বান্ডিল" সহ একটি স্ট্রাক্ট কেন ধারণার সাথে ফিট করে না? যদিও উত্তরের জন্য +1
টেম্পলার

1
অ্যাক্সেস নিয়ন্ত্রণ ব্যতীত (ব্যক্তিগত / সুরক্ষিত / পাবলিক) স্ট্রাক্ট সহ আরও কিছু করা যেতে পারে।
কোডার

1
@ ডার্কটেম্পলার: আপনি জাভাতে ফাংশনাল প্রোগ্রামিং অনুকরণ করার চেষ্টা করতে পারেন , ঠিক আছে, আপনি সিতে ওওপি অনুকরণ করার চেষ্টা করতে পারেন (লোকেরা সত্যিকার অর্থেই এই বিষয়টির উপর ebooks লিখেছেন এবং বাস্তব জগতে এটি করতে পারেন) you তবে সি এর জন্য শূন্য সহায়তা সরবরাহ করে, তাই সি ভাষা উদ্দেশ্য- ভিত্তিক নয়

1

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


1
ঠিক আছে, আমি অনুমান করি যে প্রশ্নটি হল: একটি বস্তু কী এবং কোনটি নয় তার জন্য কেন এবং কোথায় রেখাটি আঁকানো হয়?
অন্ধকার টেম্পলার

1

অবজেক্ট অরিয়েন্টেড উভয়ই একটি স্থাপত্য প্যাটার্ন (বা এমনকি একটি মেটা-প্যাটার্ন) এবং এই ভাষা ব্যবহার করে বা প্রয়োগ করতে সহায়তা করার জন্য বৈশিষ্ট্যগুলি রয়েছে এমন দুটি ভাষা বোঝায়।

আপনি একটি "ওও" নকশা বাস্তবায়ন করতে পারেন (জিনোম ডেস্কটপ সম্ভবত খাঁটি সি-তে করা ওওর সেরা উদাহরণ), আমি এটি কোবল দিয়েও দেখেছি!

তবে ওও ডিজাইন ডোজটি কার্যকর করতে সক্ষম হওয়ায় ভাষা ওও হয় না। Purists যুক্তিযুক্ত যে জাভা এবং সি ++ সত্যই ওও হয় না কারণ আপনি "ইনট" এবং "চর" এর মতো মৌলিক "ধরণের" ওভাররাইড করতে বা উত্তরাধিকারী করতে পারেন না, এবং জাভা একাধিক উত্তরাধিকার সমর্থন করে না। তবে যেহেতু এগুলিকে বহুল ব্যবহৃত OO ভাষা এবং বেশিরভাগ প্যারাডিমটিকে সমর্থন করে বেশিরভাগ "আসল" প্রোগ্রামার যারা কাজের কোড তৈরির জন্য অর্থ প্রদান করে তাদের ওও ভাষা হিসাবে বিবেচনা করে।

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


0

আসুন আমরা ওও এর সংজ্ঞাটি দেখুন:

  • মেসেজিং
  • encapsulation
  • দেরীতে বাঁধাই

সি এই তিনটির কোনওটিরই সরবরাহ করে না। বিশেষত, এটি মেসেজিং সরবরাহ করে না , যা সবচেয়ে গুরুত্বপূর্ণ।


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

উত্তরাধিকার OO- তেও গুরুত্বপূর্ণ বিবেচিত হয় এবং সি তা করে না। সিতে এনক্যাপসুলেশনের নিকটতম জিনিসটি পৃথক ফাইল যা অভ্যন্তরীণ ( static) ফাংশন এবং ডেটা সদস্য থাকতে পারে।
ডেভিড থর্নলে

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

0

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

সি এনপ্যাপুলেশন ঠিক জরিমানা করে; কোড যা কোনও কাঠামোর সংজ্ঞাটি দেখতে পাচ্ছে না এটি (বৈধভাবে) এর ভিতরে উঁকি দিতে পারে না। আপনাকে যা করতে হবে তা হ'ল হেডার ফাইলে এই জাতীয় সংজ্ঞা দেওয়া:

struct FooImpl;
typedef struct FooImpl *Foo;

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

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

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

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


0

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

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

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

এবং আমাদের fopen(file, ...); fclose(file);যেমন একটি সিনট্যাক্স ব্যবহার করতে হয় তার বিপরীতে file.open(...); file.close();তবে বড় হুপের মত ব্যবহার করতে হয় । কে সত্যই যত্ন নেবে? হতে পারে যে কেবলমাত্র তাদের আইডিইতে স্বয়ংক্রিয়ভাবে সমাপ্তির জন্য প্রচুর ansণ দেওয়া। আমি স্বীকার করি যে এটি ব্যবহারিক দৃষ্টিকোণ থেকে খুব দরকারী বৈশিষ্ট্য হতে পারে, তবে কোনও ভাষা ওওপির জন্য উপযুক্ত কিনা তা নিয়ে আলোচনার প্রয়োজন হতে পারে এমন একটিও নয়।

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

এবং অবশ্যই আমরা সেইসব সাদৃশ্যমূলক আরম্ভ করতে "অনুকরণ করা" একটু বেশি boilerplate, সঙ্গে গতিশীল প্রেরণ জন্য তাদের ফাংশন পয়েন্টার টেবিল এবং পয়েন্টার সাথে OO যেমন পণ্য পলিমরফিজম আছে vtablesএবং vptrsকিন্তু boilerplate, একটি সামান্য বিট আমাকে অনেক বিষাদ সৃষ্টি করেছে।

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

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


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

যখন আমাদের কাছে অস্বচ্ছ প্রকারের সাথে তথ্য গোপন করা থাকে তখন তাদের ইনস্ট্যান্টিয়েট করা এবং অনুলিপি / ক্লোন করা এবং তাদের ধ্বংস করার একমাত্র উপায় হ'ল inv আক্রমণকারীদের বজায় রাখার মতো দক্ষতার সাথে নির্মাতারা এবং ধ্বংসকারী হিসাবে পরিবেশন করার আনুষাঙ্গিক সমতুল্য মাধ্যমে through এটি কেবলমাত্র ভাষায় সরাসরি মডেলিং করা হয়নি এবং এর রূপ foo_createএবং foo_destroyএবং এর সাথে সাদৃশ্য থাকতে পারেfoo_clone

struct Fooএ জাতীয় ক্ষেত্রে আমাদের আক্রমণকারীদের বজায় রাখার জন্য প্রয়োজনীয় এটি হ'ল এটি নিশ্চিত করা উচিত যে এর ডেটা সদস্যদের বাহ্যিক বিশ্বের দ্বারা অ্যাক্সেস এবং পরিবর্তন করা যাবে না, যা অস্বচ্ছ ধরণের (ঘোষিত তবে বাইরের বিশ্বের সংজ্ঞায়িত নয়) অবিলম্বে দেয়। এটি বিতর্কিতভাবে তথ্য গোপনের একটি শক্তিশালী রূপ, pimplসি ++ এর সাথে সমানভাবে।

হ্যাঁ, আমি জানি যে কীভাবে লোকেরা সি-তে ওওপি প্রয়োগ করে, আপনাকে ধন্যবাদ। আমার বক্তব্যটি ছিল যে আপনার বক্তব্যটি যে নির্মাতারা "OOP- র জন্য সরাসরি পূর্বশর্ত হিসাবে বিবেচিত নয়" ত্রুটিযুক্ত।
নিকল বোলাস

আমি দেখতে পাচ্ছি, লেমমে যে সঠিক ... তবে সে ক্ষেত্রে আমরা কি বলতে পারি যে সি ধ্বংসকারী এবং নির্মাণকারীদের জন্য (পর্যাপ্ত?) সহায়তা সরবরাহ করে?

-1

কোনও খারাপ প্রশ্ন নয়।

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

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

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