খুব বিমূর্ততা খারাপ হতে পারে?


46

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

আমি বিশ্বাস করি যে আমি অত্যধিক বিমূর্ত কোড লিখি এবং আমি জানি না এটি কতটা ভাল; আমি প্রায়শই এটি লেখার প্রবণতা রাখি যেমন এটি কোনও ধরণের মাইক্রো কাঠামো, যা দুটি অংশ নিয়ে গঠিত:

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

এটা কি প্রোগ্রামিং এ ভাল পন্থা? এটি হ'ল, অনেকগুলি মডিউলগুলিতে কোডটি খুব টুকরো টুকরো হয়ে গেছে এবং খুব সহজেই বোঝা যায় এবং পরিবর্তনযোগ্য কোডটি বিমূর্ত পিওভ থেকে জটিল? সমস্ত কোডটি কি সমান জটিল হওয়া উচিত (এটি কোড 1 আরও জটিল এবং আন্তঃসংযোগযুক্ত এবং কোড 2 আরও সাধারণ) যাতে এটির মাধ্যমে অনুসন্ধান করা যে কেউ এটি একটি যুক্তিসঙ্গত সময়ের সাথে বুঝতে পারে তবে পরিবর্তন ব্যয়বহুল বা উপরে উপস্থাপিত সমাধানটি ভাল, যেখানে "পরিবর্তন কোড" বোঝা খুব সহজ, ডিবাগ, পরিবর্তন এবং "লিঙ্কিং কোড" এক ধরণের কঠিন।

দ্রষ্টব্য: এটি কোড পঠনযোগ্যতা সম্পর্কে নয়! 1 এবং 2 এ দুটি কোডই পঠনযোগ্য, তবে 2 এ কোডটি আরও জটিল বিমূর্তি সহ আসে যখন কোড 1 সহজ বিমূর্তি সহ আসে।


3
মন্তব্যগুলি এবং পরিষ্কার নামগুলি জটিল কোড বোঝার জন্য প্রয়োজনীয় সময়ের তাড়াতাড়ি আবিষ্কার করার জন্য উদ্ভাবিত হয়। আপনার নিম্ন-স্তরের কোডটি আরও জটিল হওয়ার জন্য এটি পুরোপুরি ঠিক আছে; কিছু স্তরে, আপনি সম্ভবত অবশ্যই যেকোন উপায়ে একটি আরও জটিল এবং দূর-স্তরকে কল করছেন।
ডগএম

25
সংজ্ঞা দ্বারা "খুব বেশি" খারাপ।
জন পুর্ডি

@ জিমিহোফা: তাদের এই ধরণের স্থানগুলি রাখতে হবে G আর কোরো না ঈর্ষান্বিত-আমি Haskell, লিখতে পাবেন না সব দিন। এটি বেশিরভাগই পিএইচপি, জাভাস্ক্রিপ্ট এবং ওক্যামেল প্রকৃতপক্ষে।
জন পুরি

উত্তর:


78

টিসি ++ পিএল 4 এর প্রথম শব্দ:

কম্পিউটার সায়েন্সের সমস্ত সমস্যা ইন্ডিয়ারেশনের খুব বেশি স্তর ব্যতীত অন্য এক ইন্ডিয়ারেশনের দ্বারা সমাধান করা যেতে পারে। - ডেভিড জে হুইলার

(ডেভিড হুইলার আমার থিসিস পরামর্শদাতা ছিলেন important গুরুত্বপূর্ণ শেষ লাইনটি ব্যতীত কখনও কখনও "কম্পিউটার বিজ্ঞানের প্রথম আইন" বলা হয়)


6
এবং আপনি যখন জানবেন যখন আপনার খুব বেশি মাত্রায় ইন্ডিरेশন হয়? আমি বলতে চাই এটি অভিজ্ঞতার সাথে আসে, তবে আরও অভিজ্ঞ প্রোগ্রামার সহজেই আরও বেশি দিকনির্দেশ বুঝতে পারে তাই অনেক স্তরের সমস্যা দেখেনি।
m3th0dman

2
@ এম3 থিডিডম্যান - ভবিষ্যতে পরিবর্তনগুলি করা সহজ হয়ে উঠলে আপনার বিমূর্তির সঠিক স্তর রয়েছে। অবশ্যই, আপনি কখন জানতে পারেন যে কখন তা ঘটবে যা কেবলমাত্র একটি ভিন্ন পদ্ধতিতে প্রশ্ন চক্রটির পুনরাবৃত্তি করে।


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

1
আমার অজ্ঞতা ক্ষমা করুন, কিন্তু আমি "টিসি ++
পিএল 4

30

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

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


1
"এবং এর অর্থ এই যে কোনও এক সময় প্রতিটি বিমূর্ততা কোনও না কোনওভাবে ফাঁস হতে চলেছে।": সত্য। আরও ভাল বিমূর্ততা হ'ল যা প্রায়শই ফাঁস হয়।
জর্জিও

11
বাজনার উত্তরের আলোকে (এবং ডেভিড হুইলারের উইকির পৃষ্ঠাটি উল্লেখ করে ) আপনি সম্ভবত আপনার উদ্ধৃতিটি পরিবর্তন করতে পারবেন? :)
কংগ্রেসবঙ্গাস

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

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

2
আমি একবার নির্লজ্জভাবে একটি বিমূর্ততা যেখানে এটি প্রয়োজন ছিল না যোগ করার পরামর্শ নিয়েছিলাম। এটি আমি প্রথমে যা করতে চাই তার বাইরে কখনও ব্যবহার করা হয়নি।
সিইস টিমারম্যান

15

হ্যাঁ একেবারে.

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

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

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

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

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

বিষয় ফিরে পেতে।

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

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

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

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


2
"গুড টেইলার'স প্রতিটি সিমে ফ্যাব্রিকের রিমগুলি রেখে যাবেন না যদি আপনি তৃতীয় বাহু বাড়িয়ে তুলতে পারেন বা গর্ভবতী হন" for দুঃখের সাথে আমরা প্রায়শই এইভাবে সফ্টওয়্যার ডিজাইন করার প্রবণতা রাখি।
কেমোদা

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

13

আমি মনে করি যে আমাদের লক্ষ্য প্রদত্ত ডোমেন মডেল এবং ব্যবসায়িক যুক্তিতে ভাল বিমূর্ততা সরবরাহ করা।

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

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