জো আর্মস্ট্রং [বন্ধ] দ্বারা কলা বানর জঙ্গলের সমস্যাটি বোঝানোর জন্য নমুনা কোড


14

কোডারস এ কাজ জো আর্মস্ট্রং বইয়ে বলেছে যে:

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

আমি এখানে এটি যথেষ্ট না। যদি কলা পেতে সমস্যা হয় তবে আমরা 'getBanana' ফাংশনটির পিছনে সমস্ত যুক্তি সজ্জিত করতে পারি। বানর এবং জঙ্গলে কীভাবে এই প্রসঙ্গে জড়িত। কেউ কি এমন একটি কোড স্নিপেট লিখতে পারেন যা বোঝার জন্য সহজভাবে সমস্যাটি ব্যাখ্যা করে, বলুন, এই সত্যটি প্রদর্শন করতে পারেন যে Bananaবস্তুর প্রয়োজন Monkeyএবং Jungleবস্তুগুলির সূচনা করা দরকার, দয়া করে?


দেখুন এই {{ব্লগ
gnat

মমত্ববোধটি এটি বন্ধ হয়ে গেছে - এটি কিছু ভাল আলোচনার ফলস্বরূপ। স্টার্টার হিসাবে প্রথম শ্রেণির ফাংশনগুলি দেখুন।
রবি ডি

1
@ ইওফোরিক আলোচনার ধরণের প্রশ্নগুলি আসলে অনুমোদিত তবে কোন প্রশ্নটি বিষয়গত হতে পারে ... বিষয়গত হতে পারে।
রবি ডি

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

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

উত্তর:


16

তিনি একটি সত্যের প্রতি ইঙ্গিত দিচ্ছেন, বেশিরভাগ আসল ওওপি প্রোগ্রাম উদ্বেগের বিচ্ছেদকে সম্মান করে না। উদাহরণস্বরূপ, আপনার ক্লাস থাকতে পারে:

public class Banana
{
    public Monkey Owner {get;}
}

public class Monkey
{
    public Jungle Habitat {get;}
}

public class Jungle
{
}

আপনি ব্যবহার করেন তাহলে Banana, এটি উপর নির্ভর করে transitively প্রয়োজনীয় Monkeyএবং Jungle

তবে আমি দৃ strictly়ভাবে একমত হব না যে এটি OOP এর সাথে সমস্যা এবং সেই কার্যকরী শৈলীটি কোনওভাবেই এটির না। ডান বিমূর্ততা প্রবর্তনের সাথে এটি সহজেই ওওপিতে স্থির করা যায়।

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

সম্ভাব্য বিমূর্ততা হতে পারে:

public class Banana
{
    public IBananaOwner Owner {get;}
}

public interface IBananaOwner
{
}

public class Monkey : IBananaOwner
{
    public Jungle Habitat {get;}
}

public class Jungle
{
}

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


এবং বিপরীতে যখন ফাংশনাল ভাষাগুলি বাক্সের বাইরে প্রথম শ্রেণির ফাংশনগুলিকে সমর্থন করে - তবে এটি X পার্শ্ব প্রতিক্রিয়া ছাড়াই ফাংশন ওয়াই দ্বারা নিরাপদে গ্রাস করতে পারে তা বলে না।
রবি ডি

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

@ রবিডি Monkeyএবং Jungleএটি একটি পরিবেশ Banana। বিমূর্তকরণের মতো পরিচয় করিয়ে IBananaOwnerদিয়ে পরিবেশটি সুস্পষ্ট হয়ে যায়। এবং এই পরিবেশটি কীভাবে ডিজাইন করা হয়েছে তা হ'ল তার সমস্যাটি।
ইউফোরিক

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

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

13

গরিলা বানর নয়!

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

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


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