বিভিন্ন প্রোগ্রামিং ভাষাতে ওওপি শেখার কি কোনও পার্থক্য রয়েছে? [বন্ধ]


9

আমি ওওপি শিখতে চাই আমি পাইথন জানি এবং আমি ওওপি সম্পর্কে খুব কম জিনিস জানি।

তবে যখন আমি ফোরামে "শিখুন ওওপি" অনুসন্ধান করি তখন আমি একজন লোককে বলেছিলাম যে "পাইথন এত নতুন, তাই আপনি পাইথনে ওওপি শিখতে পারবেন না you আপনার জাভা শিখতে হবে তবে জাভাতে ওওপি বুঝতে হবে"

এটা সত্যি? বিভিন্ন প্রোগ্রামিং ল্যাঙ্গুয়েজে ওওপি বোঝার কি কোনও পার্থক্য রয়েছে? এটি জাভা, সি #, সি ++, পার্ল বা পাইথনে শিখতে চান?


12
"পাইথন এত নতুন যে কারণে আপনি পাইটনের উপর ওওপি শিখতে পারবেন না Java আপনি জাভা শিখেন তারপর জাভাতে ওওপি বুঝতে পারবেন" এটি আমার কাছে কোনও ধারণা রাখে না। আপনি যদি পাইথন ব্যবহার করে ওওপি শিখতে চান তবে আমি এর কারণ নেই see এটার জন্য যাও!
হতাশ

13
পাইথন জাভার চেয়ে পুরনো নয়? আমার মাথার উপরের অংশটি আমি বিশ্বাস করি তবে এটি কয়েক বছরের মধ্যেই বন্ধ হয়ে যেতে পারে।
জিমি হোফা

2
পছন্দ করেছেন 91 বনাম 95 উইকিপিডিয়া অনুযায়ী।
এভিকাটোস

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

উত্তর:


10

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

উত্তরাধিকার ও অ্যাক্সেস: দুটি বড় বিভাগের ক্ষেত্রে অবজেক্ট সিস্টেমগুলি পৃথক হতে থাকে।

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

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

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

অ্যাক্সেস নিয়ন্ত্রণ বিভিন্ন ভাষার মধ্যে পার্থক্য অন্য বড় পয়েন্ট।

জাভা জাতীয় কিছু ভাষার "ব্যক্তিগত" এবং "সুরক্ষিত" এর মতো অ্যাক্সেস মডিফায়ারগুলিকে খুব কঠোরভাবে প্রয়োগ করা হয়েছে, যা ক্লাস এবং সাবক্লাসগুলি প্রদত্ত ভেরিয়েবল বা পদ্ধতি ব্যবহার করতে পারে ঠিক তা নির্ধারণ করে।

পাইথনের মতো অন্যরা পদ্ধতিগত বা ভেরিয়েবল নামের আগে একটি আন্ডারস্কোরের কনভেনশন ব্যবহার করে এটি ব্যক্তিগত বলে ইঙ্গিত দেয় less

অবশেষে, পাইথন হ'ল একটি অবজেক্ট-ওরিয়েন্টেড ফ্যাশনে প্রোগ্রাম করার জন্য একদম বৈধ ভাষা, এটি অন্যদের মতো একেবারে কঠোরভাবে প্রয়োগ করে না।


এই প্রশ্নের জন্য কিছুটা প্রযুক্তিগত হতে পারে।
জেরোথ

@ জেরোথ এবং খুব নির্দিষ্ট specific 'স্ব' (বা 'এটি') পরামিতি সর্বজনীন থেকে অনেক দূরে।
জাভিয়ের

@ জাভিয়ার যে কারণে আমি বলেছিলাম যে এটি পাইথনে স্পষ্ট এবং অন্য কোথাও অন্তর্নিহিত।
ওয়ার্ল্ড ইঞ্জিনিয়ার

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

@ ওয়ার্ল্ড এঞ্জাইনার আমি স্পষ্ট / অন্তর্নিহিত হওয়ার কথা বলছি না (এছাড়াও, পাইথন এ বিষয়ে অস্বাভাবিক নয়), তবে কেবল একটি ধারণা হিসাবে বিদ্যমান সম্পর্কে। কিছু ভাষা কেবল প্রথমটি নয়, সমস্ত পরামিতিগুলিতে পলিমারফিক প্রেরণ করে। কিছু নির্দিষ্ট সংস্করণের জন্য অন্যান্য ইঙ্গিতগুলি ব্যবহার করে এবং মূল স্টাইলটি 'এটি' হিসাবে কোনও যুক্তিটিকে সুবিধা দেয় না।
জাভিয়ের

18

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

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

"পাইথন এত নতুন যে কারণে আপনি পাইটনে ওওপি শিখতে পারবেন না Java আপনি জাভা শিখেন তারপর জাভাতে ওওপি বুঝতে পারবেন"

এটি কেবল আমার মাথা ব্যাথা করে। এত ভুল এক বাক্যে ক্র্যামড।

পাইথন 1989 তারিখের।

http://python-history.blogspot.com/2009/01/brief-timeline-of-python.html

জাভা থেকে 1995।

http://www.oracle.com/technetwork/java/javase/overview/javahistory-index-198355.html

সেই বিট পরামর্শের বৈধতার উপর আপনি নিজের সিদ্ধান্তগুলি আঁকতে পারেন ...


1
হ্যাঁ তবে পাইথন 1.0 ১৯৯৪ সাল পর্যন্ত ছিল না Java তবে আমি একমত যে পাইথনের ওও আছে এবং আপনি ওও এর ধারণাগুলি শিখতে পারেন। অন্যথায় বলা অবাস্তব।
chubbsondubs

2
@ চুবসনডাবস হ্যাঁ, এটি এখনও জাভার আগে! ;)
ইজকাটা

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

@ কেআরয়ান: আপনার যত্ন নেওয়ার ক্ষেত্রে স্ব-নামকরণের একটি অন্য প্রোটোটাইপ-ভিত্তিক ওও ভাষা রয়েছে।
জেরি কফিন

অ্যাকশনস্ক্রিপ্টের প্রোটোটাইপ এবং ক্লাস উভয়ই রয়েছে।
অরেঞ্জডগ

8

আমি মনে করি আপনি যে ব্যক্তির উদ্ধৃতি দিচ্ছেন তিনি কেবল ভাষাশক্তিবাদ প্রদর্শন করছিলেন।

বাস্তবে, ওওপি ধারণা এবং ওওপি বাস্তবায়নের মধ্যে পার্থক্য রয়েছে । কবিতার দিক থেকে, আপনি ওওপি-র কয়েকটি ধারণার আরও ভাল করে উপলব্ধি করলে এটি ভালভাবে বোঝা যায়।

প্রচুর প্রোগ্রামার মাত্র কয়েকটি অনুরূপ ভাষায় স্বাচ্ছন্দ্য বোধ করে, তাই তাদের দক্ষতাগুলি প্রসারিত করতে হবে না বা একটি সময়ের জন্য সক্ষম না হওয়ার ভুগতে হবে না।

সুতরাং প্রশ্নটি নেমে এসেছিল, সত্যই, পাইথন আপনাকে ওওপির ধারণাটি শিখিয়ে দেবে ?

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

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


4
ওওপির ক্ষেত্রে জাভা এবং সি ++ একে অপরের থেকে পার্থক্য যতটা পাইথনের থেকে পৃথক fer
রোবট

একটি পরিমাণে, তবে এটি মূলত ভাষা ডিজাইনের জ্ঞান এবং বিভিন্ন সীমাবদ্ধতার কারণে ঘটে।
জেরোথ

এবং প্রকৃতপক্ষে, 90% ওওপি ধারণাগুলি তাদের মধ্যে বেশিরভাগ অদৃশ্যভাবে এমনকি ভালভাবে স্থানান্তর করে।
জেরোথ

হ্যাঁ, আমি একমত। আমি জাভা এবং সি ++ ওওপির শর্তে "একই" হওয়ার কথা ভেবে কিছুটা মজার মনে করি।
রোবট

4

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

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

সুতরাং, আমার মতে: হ্যাঁ, আপনি পাইথন, জাভাস্ক্রিপ্ট, সি এবং আরও অনেক ভাষায় প্রচুর ওওপি শিখতে পারেন; তবে কিছু লোক (সম্ভবত কোনও ভবিষ্যতের নিয়োগকর্তা) যখন "ওওপি অভিজ্ঞতা" বলতে জাভা / সি ++ / সি # বোঝায়। সুতরাং, অন্যান্য মতামতটিও পরীক্ষা করা বুদ্ধিমানের কাজ হবে।

(এবং এগুলি ওওপির একমাত্র দুটি 'ধরণের' নয়))


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

2
ক্লোসটি দেখার জন্য এটি বোধগম্যও হতে পারে: আমি মনে করি না যে অনেকগুলি ভাষা / ফ্রেমওয়ার্কগুলি মাল্টিমেডথ সরবরাহ করে।
জর্জিও

2
@ জোজেফগ: ঠিক, অ্যালান কে একবার বলেছিলেন "আসলে আমি" অবজেক্ট-ওরিয়েন্টেড "শব্দটি তৈরি করেছিলাম এবং আমি আপনাকে বলতে পারি যে আমার মনে সি ++ ছিল না।"
জাভিয়ের

1
@ জিওর্জিও আসলে ডিলান সিএলওএসের কিছুটা সহজ সংস্করণ সরবরাহ করতে পারে ( মাল্টিমেডোড চালিত হলে নির্দিষ্ট করার কোনও উপায় নয়, তবে কাছে যাওয়ার পক্ষে আরও সহজ)
ড্যানিয়েল গ্রেটজার

4

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

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

অন্য পরিবার হ'ল প্রোটাইপ ভিত্তিক ওওপি। এই ভাষাগুলি তাদের ওওপি প্রয়োগের ক্ষেত্রে খুব আলাদা দেখাচ্ছে। সম্ভবত এর সর্বাধিক পরিচিত উদাহরণ জাভাস্ক্রিপ্ট, তবে জাভাস্ক্রিপ্ট এই ধারণাগুলি স্কিম এবং অবজেক্ট এলআইএসপি থেকে অনুলিপি করেছে। এগুলি কম পরিচিত ভাষা এবং সাধারণত গতিশীল টাইপ করা হয়। আমি স্ট্যাটিকালি টাইপ করা প্রোটোটাইপ ভিত্তিক ভাষাটি ভাবতে পারি না, তবে এর অর্থ এটি নেই যে একটিও নেই। আপনি এখানে এটি পড়তে পারেন: http://en.wikedia.org/wiki/Pototype-based_programming । মুল বক্তব্যটি তারা শ্রেণিভিত্তিক ভাষার তুলনায় খুব আলাদাভাবে ওওপির কাছে যান। এর অর্থ ধারণাগুলি এই দুটি পরিবারের মধ্যে পোর্টেবল নয়। আপনি কেবল একটি পরিবারে ওকে জানেন বলে আপনি এই ধারণাটি সহজেই অন্য পরিবারে স্থানান্তর করতে পারবেন না।

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


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

1

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

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

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

জাভা কোড: class Cat extends Animal {}

আপনি ওওপি দৃষ্টিভঙ্গি থেকে কি করছেন তার থেকে কিছুটা স্পষ্ট:

পাইথন কোড: class Cat(Animal):

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


1

আপনি স্পষ্টভাবে জিজ্ঞাসা করছেন ওওপি ধারণাগুলি শিখার জন্য সহজতম ভাষাটি কী। আমি মনে করি উত্তরটি পরিষ্কার: অজগর

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

জাভা

জাভাতে, আপনি একটি গেম ক্লাস লিখবেন।

public class Game {
    public int secretNumber;
    public int tries;

    public Game(int tries, int secretNumber) {
        this.tries = tries;
        this.secretNumber = secretNumber;
    }

    public void guess(int myNumber) {
        if(myNumber > secretNumber)
            System.out.println("Your guess is too high!");
        else if (myNumber < secretNumber)
            System.out.println("Your guess is too low!");
        else
            System.out.println("You win!!");
        tries = tries - 1;
        if(tries == 0) {
            System.out.println("No more tries: you lose :(");
        }
    }

    public static void main(String[] args) {
        Game game = new Game(10, 47);
        while(true) {
            // how do I read a newline again? Something with BufferedInputStreamReader?
            // how do I convert a String to a number?
        }
    }
}

আমি একজন অভিজ্ঞ প্রোগ্রামার, এমনকি আমারও সমস্যা হচ্ছে। তদ্ব্যতীত, এই সাধারণ প্রোগ্রামটির জন্য কোনও সম্ভাব্য ছাত্রকে আপনাকে কী ব্যাখ্যা করতে হবে তা দেখুন:

  • স্থির পদ্ধতি
  • দৃশ্যমানতা (পাবলিক বনাম ব্যক্তিগত)। আপনার ক্ষেত্রগুলি সর্বদা ব্যক্তিগত হিসাবে চিহ্নিত করা উচিত।
  • this. ভেরিয়েবলগুলি যখন অন্যদের মুখোশযুক্ত তখন তাদের উল্লেখ করার জন্য স্বরলিপি
  • কনস্ট্রাক্টর একটি পদ্ধতির অনুরূপ, তবে এটি কোনও পদ্ধতি নয়।
  • System.outএকটি আউটপুট স্ট্রিম। এবং হ্যাঁ, এটি ক্ষেত্র, তবে এটি একটি staticক্ষেত্র।
  • কখনও কখনও, শুধুমাত্র একটি বিবৃতি থাকলে আপনি কোঁকড়া বন্ধনী বাদ দিতে পারেন
  • String[]একটি অ্যারে হয়। এটি একটি বিশেষ ধরণের অবজেক্ট তবে এটি আবার সত্যই নয়।
  • intএকটি আদিম ধরণের। এটি বিশেষ।
  • আপনার অনেক কাঠামো পদ্ধতি দরকার

পাইথন

পাইথন অনেক 'খাঁটি'। কোনও আদিম ধরণের নেই। কোন নির্মাণকারীর অস্তিত্ব নেই, কেবলমাত্র একটি বিশেষ পদ্ধতি রয়েছে যা আরম্ভের সময় বলা হয়।

আপনার যেমন কনসোল রয়েছে তেমন ইন্টারঅ্যাক্ট করার দরকার নেই REPL। আপনি কেবল g.guess(35)স্ট্রিংটি ব্যবহার করে এবং ফিরে আসা গেমটি খেলতে পারেন ।

এটি ভাষাটিকে বেসিক OOP ধারণাগুলি শিখতে ও উপলব্ধি করতে সহজ করে তোলে।


0

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

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

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

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


কোড ধারণাটি মেসেজ পাসিং। এছাড়াও কোন উত্স।
ব্যবহারকারী

1
ওওপি ক্লাস সম্পর্কে নয়
জার্গ ডব্লু মিটাগ

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

0

আপনি যখন কোনও ভাষায় ওওপি শিখেন তখন আপনি এই ভাষায় ভাবতে শুরু করেন। আপনার কাজটি কী করা যায় এবং কীভাবে ওওপিতে স্বাদ যুক্ত করে তা ভাষা প্রভাবিত করে।

  • সেখানে কোনও আবর্জনা সংগ্রহ করা উচিত?
  • আমি কি পূর্ণসংখ্যার সাথে পদ্ধতি যুক্ত করতে পারি?
  • আমি কি ক্লাস বা প্রোটোটাইপ ব্যবহার করি?
  • কীভাবে বস্তুগুলি তাদের প্রতিফলিত হয়?

কিছু লোক ক্লাস ছাড়া ওওপি করতে পারে না। কিছু অবশ্যই প্রক্রিয়া সহ তাদের বস্তু হত্যা করতে হবে।

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

  • ওওপি অপরিহার্য ভাষা সম্পর্কে নয়
  • ওওপি ক্লাস সম্পর্কে নয়

এবং শেষ পর্যন্ত আপনি দেখতে পারেন যে ওওপি ভাল। কমপক্ষে আপনার এটি সম্পর্কে অন্য ধারণা থাকবে। আমি অ্যালান কেয়ের দ্বারা আলোচনার সন্ধান করার পরামর্শ দিই ।


আপনি যদি ভাষাগুলির দিকে না তাকান তবে এই পোস্টটি অকেজো।

আপনি এখানে দেখতে পারেন: ওওপি কী তা নিয়ে আমরা একমত হতে পারি না।

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