1
1

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

asked 04 Jan '16, 17:39

mabdsalam12's gravatar image

mabdsalam12
475120

edited 08 Jan '16, 14:53

Tamim%20Shahriar%20Subeen's gravatar image

Tamim Shahriar Subeen ♦♦
6.2k21128


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

ধরলাম একটি ক্লাস এ আপনি password ভেরিয়েবলটি ব্যাবহার করবেন। এখানে আপনি যদি এটিকে public হিসেবে ডিক্লিয়ার করেন তাহলে অন্য ক্লাস থেকে এটিকে এক্সেস করা যাবে আর যদি private হিসেবে ডিক্লিয়ার করেন তাহলে অন্য ক্লাস এক্সেস করতে পারবে না ।

ধরলাম আপনি একটি অনেক বড় প্রোজেক্ট করবেন সেখানে অনেকেই কাজ করছে। এক্ষেত্রে আপনি নিশ্চয়ই চাবেন না কেউ আপনার পাসওয়ার্ড এর ডাইরেক্ট এক্সেস নিক। এ খেত্রে আপনি এটিকে private ডিক্লিয়ার করবেন ।

একটি ছোট উদাহরন।

class Account{
public:
 int accountNumber;
 string userName;
 string password;

};

void myFunction()
{
   Account a;
   // you can change the password
   a.password = 123qwe;

   // you can get the password
   string p = a.password;
}

আর একটি ছোট উদাহরন।

class Account{
private:
 int accountNumber;
 string userName;
 string password;

public:
  int ckLogin(string u, string p){
    if(userName==u && password==p)
     return accountNumber;
    else 
     return 0;
  }

};

void myFunction()
{
   Account a;
   // you can't change the password
   a.password = 123qwe;  // error

   // you can't get the password
   string p = a.password;   // error

   // you can only check a pair of userName and password valid or not
   a.ckLogin("sharif","123qwe");   
}
permanent link

answered 09 Jan '16, 05:43

Sharif%20Chowdhury's gravatar image

Sharif Chowdhury
3.5k111

যদিও এটা খুব ছেলেমানুষি মনে হয়। কিন্তু সত্যিই আমি ক্লিয়ার না। ধরেন "ছোট উদাহরন" ই আমার আর আপনার প্রজেক্ট যেখানে ক্লাস টা আমি লিখেছি আর myFunction আপনার লেখা। এই প্রোগ্রাম টা যখন রান হবে তখন আমি জানব যে ফুল প্রজেক্টে কি কি কোড লেখা হয়েছে এখানে তো ৩য় কোন পক্ষ কোন myFunction2 এম্বেড করতে পারছে না। এখানেই আসলে আমার খটকা।

(09 Jan '16, 11:56) mabdsalam12
1

ধরুন এটি একটি ব্যাংক ম্যানেজমেন্ট এর জন্য একটি ক্লাস । এখানে Account ক্লাসটি একবার তৈরী করা আছে । আপনাকে একটি ছোট কাজ দেওয়া হলো, যেমনঃ যাদের accountNumber জোড় তাদেরকে একটি মেসেজ পাঠাতে হবে। এখানে আপনাকে Account ক্লাসটির কোড দেওয়া হলো যেন আপনি কাজ করতে পারেন ।

এখন দেখুন এখানে যদি আপনার ফাংশন myFunction হয় তবে প্রথম খেত্রে আপনি কোড লিখে সবার পাসওয়ার্ড পরিবর্তন করে দিতে পারবেন না দ্বিতীয় খেত্রে পারবেন না।

(10 Jan '16, 14:24) Sharif Chowdhury
1

একটু পরিবর্তন আগের কমেন্ট এঃ এখানে যদি আপনার ফাংশন myFunction হয় তবে প্রথম খেত্রে আপনি কোড লিখে সবার পাসওয়ার্ড পরিবর্তন করে দিতে পারবেন যেটা দ্বিতীয় খেত্রে পারবেন না।

(11 Jan '16, 02:30) Sharif Chowdhury

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর একটি গুরুত্বপূর্ণ অংশ Encapsulation
জাভা প্রোগ্রামিং ল্যাঙ্গুয়াজে data member এবং method গুলোকে encapsulate করার জন্যে চার ধরনের Access modifier ব্যবহার করা হয়।

private: কেবলমাত্র নিজ ক্লাস থেকে access করা যায়।
public: সব Scope থেকে access করা যায়।
protected: একই প্যাকেজ এর মধ্যে direct এবং অন্য প্যাকেজে যদি class টি inherit করা হয়।
default: একই প্যাকেজে এর মধ্যে direct অথবা inherit করা হয়।

যখন ভাল মাপের কোন কাজ করার প্রয়োজন হয় তখন প্রতিটা class, variable, method এর scope নির্ধারণ করে দিতে হয় যাতে data এবং data handle approach একে অন্যের সাথে মিশে গুরুচণ্ডালী দোষ তৈরি করতে না পারে।

প্রথমদিকে Encapsulation ব্যাপারটা হয়ত অনেকটা বিদঘুটে লাগবে। কিন্তু পরবর্তীতে প্রজেক্ট বেজ কাজ করার মাধ্যমে এই বিষয়গুলা আরও ভালভাবে বুঝতে পারবেন।

permanent link

answered 08 Jan '16, 12:57

arsho's gravatar image

arsho
313

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

খুবই সহজ উদাহরণ: ধরা যাক কোণ ক্লাসের একটাই পাবলিক ফাংশন আছে, যার কাজ হচ্ছে দুইটা প্রাইভেট ভ্যারিয়েবল a আর b কে ১ করে বাড়ানো। এবং ওই ক্লাসের আর কেউ a আর b কে পরিবর্তন করে না। তাহলে আমরা ধরে নিতে পারবো যে a+b সব সময় জোড় হবে। আমরা সেটা ঠিক ধরে আমাদের লজিক ইমপ্লিমেন্ট করতে পারবো। যদি a আর b পাবলিক হয়, এবং কেউ বাইরে থেকে না জেনে a বা b এর মান এমনভাবে পরিবর্তন করলো যাতে a+b বিজোড় হয়ে যায়। তাতে আমাদের লেখা লজিক কাজ করবে না।

permanent link

answered 29 Jan '16, 18:44

wasi's gravatar image

wasi
764

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×63
×1

question asked: 04 Jan '16, 17:39

question was seen: 1,963 times

last updated: 29 Jan '16, 18:45