কেন কোনও প্রোগ্রামকে একাধিক ক্লাসে বিভক্ত করা ভাল? [বন্ধ]


62

আমি এখনও উচ্চ বিদ্যালয়ের ছাত্র (দশম শ্রেণিতে প্রবেশ করি), এবং এখনও স্কুলে কম্পিউটারের প্রকৃত কোর্স করতে হয়নি। আমি এখন পর্যন্ত যা কিছু করেছি তা বইয়ের মাধ্যমে। এই বইগুলি আমাকে উত্তরাধিকারের মতো ধারণাগুলি শিখিয়েছে, তবে কীভাবে কোনও প্রোগ্রামকে একাধিক ক্লাসে বিভক্ত করতে সহায়তা করে? বইগুলি আমাকে কখনও বলেনি।

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

এই প্রকল্পটি জাভাতে ছিল এবং আমি একমাত্র ব্যক্তি এটিতে রেকর্ডের জন্য কাজ করি।


1
সফটওয়্যার প্রতিটি টুকরা আরও সহজ করতে! infoq.com/preferencesations/Simple-Made-Easy-QCon-L London
তেহশ্রাইক

49
আপনি যখন আপনার বইগুলি পড়েন, তখন সেগুলি অধ্যায় এবং বিভাগগুলিতে বিভক্ত ছিল? জিনিসগুলিকে সংগঠিত করার জন্য আমরা একটি প্রোগ্রামকে ক্লাসে বিভক্ত করি, যেমন বইগুলি বিষয়গুলি সংগঠিত করার জন্য পাঠ্য অধ্যায়গুলিতে বিভক্ত করে।
রিওয়ালক

12
রোমানরা বলতেন: বিভক্ত হয়ে পড়ুন।
জর্জিও

7
@Giorgio: বা ইংরেজিতে, কারণ ল্যাটিন তাই আর ব্যবহার করা হয় না ডিভাইড জয়
ম্যাথিউ এম।

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

উত্তর:


71

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

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

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


7
প্রোগ্রামিংয়ে প্রচুর ধারণা / ধারণা (ওও-নীতি, বিতরণ উত্স নিয়ন্ত্রণ, কোডিং মান) তখনই সত্যিকার অর্থে বোধ করা যায় যখন আপনি কোনও দলে তুলনামূলকভাবে বড় প্রকল্পগুলিতে কাজ করেন। আপনি যখন বুঝতে পারবেন কেন আপনি যখন এই জাতীয় প্রকল্পগুলিতে আসলে কাজ করেন।
joshin4colours

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

2
কিছু মূল শব্দগুলি হ'ল "কাপলিং" বা "ডিকোপলিং", "এনক্যাপসুলেশন", "তথ্য গোপন করা"।
মার্কতানি

@ ব্রেন্ডনলং, আমি সম্মত এবং আমি এও যোগ করব যে এনক্যাপসুলেশন প্রায় অসম্ভব। আপনি আলাদা আলাদা প্রোগ্রাম না লিখলে ... তবে সাধারণত অনেকগুলি অংশ থাকে যা একে অপরের উপর নির্ভর করে না, তবে কেবল ভাগ করে নেওয়া নির্ভরশীলতা
জো সো

29

ভাল, সবচেয়ে সহজ প্রতিক্রিয়া হতে পারে "এটি জিনিসগুলিকে সংগঠিত করতে সহায়তা করে।" অন্য কিছু না হলে আপনি এটিকে একটি নোটবুকের বিভাগগুলির সাথে তুলনা করতে পারেন - আপনার কাছে "ইউআই সম্পর্কিত সমস্ত জিনিস" এখানে এবং "গেমপ্লে সম্পর্কিত সমস্ত স্টাফ" রয়েছে if

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

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


12

এটা একটা ভালো প্রশ্ন! সাধারণ এবং ভাল জিজ্ঞাসা। ঠিক আছে ... কম্পিউটার বিজ্ঞান অধ্যয়নরত এমন শিক্ষার্থীর পক্ষে উত্তরটি এত সহজে বোঝা যায় না যে সম্ভবত গভীর ওওতে জানে না এবং সম্ভবত অভিজ্ঞতার সাথে কাজ করে না।

সুতরাং, আমি একটি দৃশ্যের বর্ণনা দিয়ে এবং একাধিক ক্লাস সফ্টওয়্যার একতরফা সফ্টওয়্যার (কেবলমাত্র একটি শ্রেণীর দ্বারা তৈরি) থেকে কীভাবে উন্নত তা কল্পনা করে উত্তর দিতে পারি:

  • পঠনযোগ্যতা : কয়েকটি ছোট এবং সংগঠিত ফাইলের চেয়ে 10000 লাইনযুক্ত একটি ফাইলের মধ্যে কোড ব্রাউজ করা এবং লিখতে অনেক বেশি শক্ত।
  • পুনঃব্যবহারযোগ্যতা : আপনি যদি একটি একক শ্রেণি লিখেন তবে কোড নকল করে পিছলে যেতে পারেন । এর অর্থ কোডের আরও লাইন এবং সম্ভবত আরও বাগ (!)
  • টেস্টিবিলিটি : একক কার্যকারিতা পরীক্ষা করার কী? আপনি যদি একটি শ্রেণিতে একটি যুক্তি কার্যকারিতা বিচ্ছিন্ন করেন তবে আপনার জীবন আরও সহজ হবে।
  • কোড রক্ষণাবেক্ষণযোগ্যতা : আপনি একক স্থানে বহুগুণ ক্লাসের সাথে একটি বাগ ঠিক করতে বা কার্যকারিতা বাড়িয়ে তুলতে পারেন: সুন্দর ছোট্ট ক্লাসগুলি।
  • প্রকল্পের কাঠামো : ওও আপনি কি কল্পনা করতে পারবেন যে কেবলমাত্র একটি উত্স ফাইলযুক্ত একটি প্রকল্প কীভাবে দেখাবে?

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

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

8

এখানে অনেক ভাল উত্তর আছে, এবং আমি অবশ্যই তাদের সাথে একমত, তবে আমি মনে করি যে আরও কিছু উল্লেখ করার মতো।

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

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

কারও মাথায় প্রোগ্রাম রাখা। জর্জিও থেকে লিঙ্ক


1
+1: টিমের কাজও গুরুত্বপূর্ণ! উদাহরণস্বরূপ, " paulgraham.com/head.html এবং শিরোনাম সহ অনুচ্ছেদে" একই কোডের একাধিক লোককে সম্পাদনা করবেন না "
জর্জিও

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

এটি পুনর্বিবেচনা নিয়ন্ত্রণেও প্রযোজ্য - পৃথক ফাইলগুলিতে কাজ করা মানে কম বিরোধ এবং মার্জ হওয়া।
মনিকা

7

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

আপনি যদি নিজের কোডটি বিভিন্ন লজিকাল ইউনিটগুলিতে (ক্লাস, মডিউল ইত্যাদি) ভাঙেন তবে বলা হচ্ছে যে আপনার কোডের টুকরো বোঝার জন্য খুব সহজ সংক্ষিপ্ত থাকতে পারে। যে পরে বজায় রাখা যেতে পারে। আমার মডিউলগুলির অনেকগুলি কোডের 20 লাইনেরও কম। আমি জানি যে প্রদত্ত বিষয়ের সমস্ত কোড একটি নির্দিষ্ট জায়গায়। এর অর্থ এটিও হ'ল যদি অন্য কেউ এই প্রকল্পে যোগ দেয় তবে তাদের কাছে জিনিসগুলি খুঁজে পেতে আরও সহজ সময় হবে।

যেমন জেরাল্ড সুসমান বলেছিলেন আমাদের প্রোগ্রামগুলি প্রথমে লেখা উচিত যাতে লোকেরা এটি পড়তে পারে এবং দ্বিতীয়টি যাতে কম্পিউটারটি চালাতে পারে। (এবং যদি আপনার "কম্পিউটার প্রোগ্রামগুলির কাঠামো এবং ব্যাখ্যা ব্যাখ্যার জন্য এনটিও থাকে তবে আপনার উচিত)


4

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

এটিকে পরিচালনা করার জন্য আপনাকে কেবল বিভাজন করতে হবে এবং জয় করতে হবে।


3

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

যদি আপনি "স্ট্রাকচার্ড প্রোগ্রামিং" সন্ধান করতে পারেন তবে আপনি সম্ভবত আরও কিছু দ্রুত কার্যকর হতে পারেন। (নিশ্চিত করুন যে আপনি পুরানো কাঠামোগত প্রোগ্রামিং সম্পর্কে পড়েছেন Old এটি বস্তুগুলিতে ভাঙ্গা। ধারণাটি হ'ল আপনার প্রধান প্রোগ্রামটি একটি স্বল্প রুটিন যা কাজ করতে সাব্রোটাইনগুলিকে (জাভাতে "পদ্ধতি") কল করে। প্রতিটি সাব্রোটাইন কেবলমাত্র তার পরামিতি দ্বারা এটি কী বলে তা জানে। (এই প্যারামিটারগুলির মধ্যে একটি ফাইলের নাম হতে পারে, যাতে আপনি কিছুটা প্রতারণা করতে পারেন)) সুতরাং সাবরোটাইন / পদ্ধতির শিরোনামটি দেখে আপনি এটি কী করে তা সম্পর্কে একটি দ্রুত ধারণা দেয়, প্রায় এক নজরে না।

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

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

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


0

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

ধরা যাক আপনি একটি জাম্পিং গেম তৈরি করেন। পরে যখন আপনি একটি কামান গেমটি করার সিদ্ধান্ত নেন, আপনি দেখতে পাবেন যে আপনি জাম্পিং গেমটিতে যে পদার্থবিজ্ঞানের গণনা ব্যবহার করেছিলেন তা এখানে কার্যকর।

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


0

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

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

যাইহোক, ক্লাসগুলি যেদিকে জ্বলজ্বল করে এটি এটি নয়। Stringক্লাসটি বিবেচনা করুন : charঅ্যারে এবং কিছু স্ট্যাটিক ফাংশন ব্যবহার করে আপনার কাছে একই বৈশিষ্ট্য থাকতে পারে। এই মুহুর্তে, ফাংশনগুলি আপনাকে কিছুটা অতিরিক্ত সুরক্ষা এবং সিনট্যাকটিক চিনি দেয়। আপনি লিখতে পারেন string.length()পরিবর্তে length(char_array); এটি খুব বড় বিষয় নয়, তবে অনেক লোক এখনও এটি পছন্দ করে। তদুপরি, আপনি জানেন যে যদি কেউ আপনাকে একটি দেয় তবে Stringএটি Stringনির্মাণকারীর সাহায্যে তৈরি করা হয়েছিল এবং এটি অবশ্যই lengthফাংশনটির সাথে কাজ করবে - যদি অ্যারে সংস্করণটি কিছু অক্ষর পরিচালনা করতে না পারে তবে এটি আপনাকে সেখানে thereোকানো থেকে বিরত করার কোনও উপায় নেই ।

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

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


0

পুরো ধারণাটি বিভাজন এবং বিজয় নামে একটি সাধারণ নিয়মের ভিত্তিতে ।
এই দৃষ্টান্তটি প্রায় যেখানেই ব্যবহার করা যেতে পারে; আপনি কোনও সমস্যাটিকে ছোট সমস্যাগুলিতে ভাগ করেন এবং তারপরে আপনি এই সামান্য, সহজ এবং সুপরিচিত সমস্যাগুলি সমাধান করেন।
আপনার প্রোগ্রামকে ক্লাসে ভাগ করা এমন এক ধরণের বিভাজন যা গত দশকে সাধারণ হওয়া শুরু হয়েছিল। এই প্রোগ্রামিং দৃষ্টান্তে আমরা কিছু বস্তুর দ্বারা আমাদের সমস্যাটির মডেল করি এবং এই বিষয়গুলির মধ্যে বার্তা প্রেরণ করে সমস্যাটি সমাধান করার চেষ্টা করি।
কিছু লোক বলতে পারে যে এই পদ্ধতির বোঝা, প্রসারিত এবং ডিবাগ করা সহজ।
যদিও কিছু লোক একমত নয় :)


0

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

আইডিয়াটি হ'ল আপনি দীর্ঘ প্রোগ্রাম দিয়ে শুরু করবেন না এবং তারপরে এটি ক্লাসে বিভক্ত করুন। তবে আপনি প্রথমে অবজেক্ট / ক্লাসের ক্ষেত্রে আপনার অ্যাপ্লিকেশনটি মডেল করেন এবং তারপরে অ্যাপ্লিকেশনগুলি তৈরি করতে তাদের সাথে সংযুক্ত হন।

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