ফুটো বিমূর্ততা মানে?


90

"লিকি বিমূর্তি" শব্দটির অর্থ কী? (দয়া করে উদাহরণ সহ ব্যাখ্যা করুন I



14
আপনি জোয়েল স্পলস্কির মূল নিবন্ধটি লিকি অ্যাবস্ট্রাকশনসের আইনটি পড়তে চাইতে পারেন যা আমি যতদূর জানি শব্দের উৎপত্তি।
ড্যানিয়েল প্রাইডেন

4
প্রস্তাবিত ডুপের বেশিরভাগ উত্তর সাবলীল ইন্টারফেস সম্পর্কে।
ডেভিড থর্নলি

@ ডেভিড: দ্বিতীয় সর্বোচ্চ ভোট প্রাপ্ত পোস্ট ফাঁস বিমূর্তির অর্থ কী, এবং দুর্দান্ত উদাহরণ সহ উত্তর দেয়।
মিসিংফ্যাক্টর

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

উত্তর:


108

এখানে একটি মিটস্পেস উদাহরণ:

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

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

এটি আসলে বেশ লক্ষণীয় ... একটি 16 বছর বয়সের বা একটি 80 বছর বয়সী এই জটিল টুকরোটি যন্ত্রপাতিটি পরিচালনা করতে পারে এটি ভিতরে কীভাবে কাজ করে তা সম্পর্কে সত্যতা না জেনে!

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

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


8
উদাহরণের জন্য ধন্যবাদ। অন্য কেউ সাধারণ ব্যাখ্যা দিতে সক্ষম হবে বলে মনে হয় নি।
সেবাস্তিয়ান প্যাটেন

8
এটি একটি দুর্দান্ত উত্তর, বিশেষত যেহেতু এটি ব্যবহারকারীর দৃষ্টিভঙ্গি প্রদর্শন করে, যা সফ্টওয়্যার সংস্করণটি।
চাদ

4
মিটস্পেস বলতে কী বোঝায়? ব্যক্তির ব্যাখ্যা দেই?
brumScouse

4
@ ব্রামস্কাউজ "মিটস্পেস" এর অর্থ শারীরিক, অফলাইন বিশ্ব। এটি অনলাইন, সাইবারস্পেস বিশ্বের বিপরীতে ব্যবহার করতে ব্যবহৃত হয়। সংজ্ঞাটির একটি লিঙ্ক অন্তর্ভুক্ত করার জন্য আমি আমার উত্তরটি সম্পাদনা করব।
মার্ক ই। হাজেস

4
আমি পছন্দ করি যে এই পোস্টটি কীভাবে "এখনও ফাঁস রয়েছে" নির্দেশ করে। এগুলি সবগুলি হ্রাস করার বিষয়ে।
আলাবৌদি

52

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

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


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

13

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

একটি ফাঁস বিমূর্ততা কোনও বাস্তবায়িত বিমূর্ততা বোঝায়, জটিলতা হ্রাস করার (বা আড়াল করা) উদ্দেশ্যে, যেখানে অন্তর্নিহিত বিবরণগুলি সম্পূর্ণ গোপন নয়

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

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


13

নেট নেট বিকাশকারীদের সাথে পরিচিত একটি উদাহরণ এখানে: এএসপি.এনইটি Pageক্লাস এইচটিটিপি অপারেশনগুলির বিশদ বিশেষত ফর্ম ডেটা পরিচালনার বিবরণ গোপন করার চেষ্টা করে যাতে বিকাশকারীদের পোস্ট মানগুলির সাথে ডিল করতে না হয় (কারণ এটি স্বয়ংক্রিয়ভাবে সার্ভারে ফর্মের মানগুলি মানচিত্র করে) নিয়ন্ত্রণ)।

তবে আপনি যদি সর্বাধিক প্রাথমিক ব্যবহারের পরিস্থিতিগুলি অতিক্রম করে Pageবিমূর্ততা ফাঁস শুরু হয় এবং ক্লাসের প্রয়োগের বিশদটি না বুঝে পৃষ্ঠাগুলি নিয়ে কাজ করা শক্ত হয়ে যায়।

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


ওয়েবফর্মগুলির বালতিতে বো নীচে ছিল। সবচেয়ে খারাপটি হ'ল যে পাতলা পর্দার বিমূর্ততাগুলি আপনি যেমন গ্লোভ বক্সে কাজ করছিলেন তেমন এইচটিটিপি সঙ্গে কাজ করার পরিমাণ।
ব্রুমস্কাউজ

10

ভাল, একভাবে এটি নিখুঁত তাত্ত্বিক জিনিস, যদিও গুরুত্বহীন নয়।

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

একটি ফাঁসী বিমূর্ততা হ'ল এটি যা গোপন করে তার বিবরণ গোপন করে না। যদি জাভা বা .NET- তে 5-অক্ষরের স্ট্রিংয়ে কল স্ট্রিং করুন en একটি চরিত্রের .5। বিমূর্ততা ফাঁস হয়েছে। যদিও এটি ফাঁস না করার অর্থ দৈর্ঘ্য সন্ধানের জন্য হয় আরও স্টোরেজ স্পেসের প্রয়োজন হয় (আসল দৈর্ঘ্য সংরক্ষণের জন্য) অথবা ও (1) থেকে ও (এন) হয়ে যাবে (আসল দৈর্ঘ্যটি কী তা নির্ধারণ করতে)। যদি আমি আসল উত্তরের বিষয়ে চিন্তা করি (প্রায়শই আপনি সত্যই করেন না) আপনার সত্যিকারের যা চলছে তা জ্ঞান নিয়ে কাজ করা দরকার।

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


4
আপনি ইলেক্ট্রনিক্স এবং পদার্থবিজ্ঞানের সাথে কাজ করছেন এই সত্যটি গোপন করতে আপনি 1 এবং 0 এর সাথে কাজ করেন (খুব দেরিতে মন্তব্য, আমি জানি)
ডেভি 8

7

আমি আরপিসি ব্যবহার করে উদাহরণ দেওয়ার শিরাতে অবিরত থাকব।

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

বাস্তবতা পৃথক কারণ স্থানীয় ফাংশন কল করার (যদিও আপনি বিশ্বের সবচেয়ে ধীরে ধীরে ব্যাখ্যার ভাষা ব্যবহার করছেন) এবং এর মধ্যে বিশাল পার্থক্য রয়েছে:

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

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

  • আপনি আপনার স্থানীয় প্রক্সিটি ইনস্ট্যান্ট করতে সক্ষম নাও হতে পারেন
  • আপনি আপনার দূরবর্তী প্রক্সিটি ইনস্ট্যান্ট করতে সক্ষম নাও হতে পারেন
  • প্রক্সিগুলি সংযোগ করতে সক্ষম হতে পারে
  • আপনার পাঠানো প্যারামিটারগুলি এটি অক্ষত বা একেবারে নাও তৈরি করতে পারে
  • রিমোট প্রেরিত ফেরতের মান এটি অক্ষত বা একেবারেই তৈরি করতে পারে না

সুতরাং এখন আপনার আরপিসি কল যা "স্থানীয় ফাংশন কলের মতো" কেবলমাত্র স্থানীয় ফাংশন কল করার সময় আপনার যে অতিরিক্ত ব্যর্থতার শর্তগুলির সাথে লড়াই করতে হবে না তার পুরো বোতল রয়েছে। বিমূর্ততা আবার আরও ফাঁস, আরও শক্ত।

শেষ পর্যন্ত আরপিসি একটি খারাপ বিমূর্ততা কারণ এটি প্রতিটি স্তরে চালুনির মতো ফাঁস হয় - যখন সফল হয় এবং উভয় ক্ষেত্রেই ব্যর্থ হয়।


<pimp> আমি এরলং পদ্ধতির পক্ষে এটি আরও ভাল পছন্দ করি কারণ এটি কোনও ফাংশন কল এবং কোনও প্রক্রিয়াতে একটি বার্তা প্রেরণ করে যে বিন্দুতে দু'জন খুব আলাদা সিনট্যাক্স ব্যবহার করে তা লুকানোর চেষ্টা করে না। একইসাথে সাধারণ সিনট্যাক্স ব্যবহার করেও একটি দূরবর্তী প্রক্রিয়া বার্তা প্রেরণ স্থানীয় প্রসেস প্রেরণের চেয়ে দৃশ্যমানভাবে পৃথক। </
P>>

4
ঠিক আছে, এটিই কেবলমাত্র প্রতিক্রিয়া যা প্রকৃতপক্ষে একটি ভাল উদাহরণ দেয় (পড়ার বোঝা, ভাবেন), সুতরাং এটি আমার +1 পায়।
মার্ক ই। হাজেস

4

মধ্যে একটি উদাহরণ জ্যাঙ্গো অনেক সাথে অধিকের উদাহরণ ORM :

স্যাম্পল এপিআই ব্যবহারে লক্ষ্য করুন যে আপনাকে বহু থেকে বহুগুণে গুণাবলীতে পাবলিকেশন অবজেক্ট যুক্ত করতে পারার আগে বেইস আর্টিকেল এ 1 সংরক্ষণ করতে হবে। এবং লক্ষ্য করুন যে বহু থেকে বহু বৈশিষ্ট্য আপডেট করা অবিলম্বে অন্তর্নিহিত ডাটাবেসে সংরক্ষণ করে, যখন একটি একক বৈশিষ্ট্য আপডেট করা .save () না বলা পর্যন্ত ডিবিতে প্রতিফলিত হয় না।

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


3

বিমূর্ততা কী?

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

বিমূর্তনের উদাহরণ: একটি 737/747 উড়ানের জটিলতাগুলি "বিমূর্ত" দূরে রয়েছে

বিমানগুলি খুব জটিল যন্ত্রের টুকরো। আপনার কাছে জেট ইঞ্জিন, অক্সিজেন সিস্টেম, বৈদ্যুতিক সিস্টেম, ল্যান্ডিং গিয়ার সিস্টেম ইত্যাদি রয়েছে তবে পাইলটকে জেট ইঞ্জিনের জটিলতা সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই..এটি সমস্ত "বিমূর্ত" দূরে রয়েছে। এর অর্থ হ'ল বিমানের চালককে বিমানের চালনার বিষয়ে কেবলমাত্র উদ্বেগের দরকার: বাম দিকে যেতে বাম এবং ডানদিকে যেতে ডানদিকে যেতে, উন্নতি অর্জনের জন্য টানুন এবং নীচে নামার জন্য চাপ দিন।

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

737 উদাহরণে ফাঁস বিমূর্ততা

বাস্তবে, একজন পাইলটকে প্রচুর গুরুত্বপূর্ণ বিষয় নিয়ে চিন্তা করতে হবে - সবকিছুই বিমূর্ত করা হয়নি: পাইলটদের বাতাসের গতি, জোর, আক্রমণের কোণ, জ্বালানী, উচ্চতা, আবহাওয়ার সমস্যা, উত্সের কোণ এবং এই সম্পর্কে উদ্বিগ্ন হতে হবে পাইলট সঠিক দিকে যাচ্ছে। কম্পিউটারগুলি এই কাজগুলিতে পাইলটকে সহায়তা করতে পারে তবে সবকিছু স্বয়ংক্রিয়ভাবে / সরলীকৃত হয় না।

উদাহরণস্বরূপ, যদি পাইলটটি কলামটিতে খুব শক্তভাবে টানেন - বিমানটি মানবে, তবে পাইলট বিমানটি আটকে রাখার ঝুঁকি নিয়ে ফেলবে এবং একবার স্থবির হয়ে গেলে, মাটিতে ফিরে নামার আগে এটির নিয়ন্ত্রণ ফিরে পাওয়া শক্তিশালী is ।

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

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

কোডে ফাঁস বিমূর্ততা

...... এটি আপনার কোডে একই জিনিস। যদি আপনি অন্তর্নিহিত বাস্তবায়ন বিশদটি জানেন না, তবে প্রায়শই না জানা আপনি নিজেকে একটি কোণায় কাজ করবেন।

এখানে কোডিংয়ের একটি উদাহরণ রয়েছে:

ওআরএম ডাটাবেস প্রশ্নগুলির সাথে লেনদেন করতে অনেক ঝামেলা বিমূর্ত করে, তবে আপনি যদি কখনও এরকম কিছু করেন তবে:

User.all.each do |user|
   puts user.name # let's print each user's name
end

তারপরে আপনি উপলব্ধি করতে পারবেন যে যদি আপনি কয়েক মিলিয়ন ব্যবহারকারীর বেশি পেয়ে থাকেন তবে আপনার অ্যাপ্লিকেশনটি মেরে ফেলার একটি দুর্দান্ত উপায়। সবকিছু বিমূর্ত হয় না। আপনার জানা দরকার যে User.all25 মিলিয়ন ব্যবহারকারীর সাথে কল করা আপনার মেমরির ব্যবহারকে আরও বাড়িয়ে তুলবে এবং সমস্যা তৈরি করতে চলেছে। আপনার কিছু অন্তর্নিহিত বিশদ জানতে হবে। বিমূর্ততা ফুটো হয়।


0

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

উদাহরণস্বরূপ, এই SQLপ্রশ্নটি বিবেচনা করুন :

SELECT id, first_name, last_name, age, subject FROM student_details;

এবং এর বিকল্প:

SELECT * FROM student_details;

এখন, তারা যুক্তিসঙ্গত সমতুল্য সমাধানগুলির মতো দেখায় তবে পৃথক কলামের নাম নির্দিষ্টকরণের কারণে প্রথমটির পারফরম্যান্স আরও ভাল।

এটি একটি তুচ্ছ উদাহরণ কিন্তু শেষ পর্যন্ত এটি জোয়েল স্পলস্কির উদ্ধৃতিতে ফিরে আসে:

সমস্ত অ-তুচ্ছ বিমূর্ততা কিছুটা অবধি ফাঁস হয়।

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


-1

ধরুন, আমাদের একটি লাইব্রেরিতে নিম্নলিখিত কোড রয়েছে:

Object[] fetchDeviceColorAndModel(String serialNumberOfDevice)
{
    //fetch Device Color and Device Model from DB.
    //create new Object[] and set 0th field with color and 1st field with model value. 
}

গ্রাহক যখন এপিআই কল করেন তখন তারা একটি বস্তু পান []। গ্রাহককে বুঝতে হবে যে অবজেক্ট অ্যারের প্রথম ক্ষেত্রটির রঙ মান এবং দ্বিতীয় ক্ষেত্রটি হল মডেল মান। এখানে বিমূর্ততা গ্রাহক কোডে লাইব্রেরি থেকে ফাঁস হয়েছে।

সমাধানগুলির মধ্যে একটি হ'ল কোনও অবজেক্টটি ফিরিয়ে আনা যা ডিভাইসের মডেল এবং রঙকে সজ্জিত করে। গ্রাহক মডেল এবং রঙের মান পেতে সেই বস্তুকে কল করতে পারেন।

DeviceColorAndModel fetchDeviceColorAndModel(String serialNumberOfTheDevice)
{
    //fetch Device Color and Device Model from DB.
    return new DeviceColorAndModel(color, model);
}

-3

ফাঁস বিমূর্ততা সবই এনক্যাপসুলেটরিং স্টেট সম্পর্কে। ফুটো বিমূর্তনের খুব সাধারণ উদাহরণ:

$currentTime = new DateTime();

$bankAccount1->setLastRefresh($currentTime);
$bankAccount2->setLastRefresh($currentTime);
$currentTime->setTimestamp($aTimestamp);

class BankAccount {
    // ...

    public function setLastRefresh(DateTimeImmutable $lastRefresh)
    {
        $this->lastRefresh = $lastRefresh;
    } }

এবং সঠিক উপায় (ফাঁস বিমূর্ততা নয়):

class BankAccount
{
    // ...

    public function setLastRefresh(DateTime $lastRefresh)
    {
        $this->lastRefresh = clone $lastRefresh;
    }
}

আরও বিবরণ এখানে

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