কখন বাস্তবায়ন এবং প্রসারিত? [বন্ধ]


90
  • কখন implementবা extendব্যবহার করা উচিত ?
  • কিছু বাস্তব-বিশ্বের উদাহরণ কি?

এটা কি সঠিক?

বাস্তবায়ন কার্যকর করার একটি উপায় বলে মনে হয় যে একটি শ্রেণিতে নির্দিষ্ট পদ্ধতি রয়েছে এবং এই পদ্ধতিগুলির ফাংশন কলগুলি সঠিকভাবে ফর্ম্যাট করা হয়েছে। বাস্তবায়ন ক্লাসে ভেরিয়েবল বা "সেটিংস" পাস করার উপায় নয় যদিও?

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

বর্ধমান শ্রেণিগুলি বর্ধিত (শিশু?) শ্রেণিটিকে তার অভিভাবক শ্রেণীর সমস্ত কিছু উত্তরাধিকার সূত্রে ঘোষণা করে পদ্ধতিগুলি এবং ভেরিয়েবলগুলি বাদ দেয় private?

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


4
আমি আপনাকে উত্তরাধিকার সম্পর্কে পড়তে পরামর্শ দিচ্ছি।
রাফ কেটলার

উত্তর:


64

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

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

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

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

আমি বিশ্বাস করি যে উত্তরাধিকার সম্পর্কে আপনার বোঝাপড়াটি মূলত সঠিক। পরবর্তী পদক্ষেপটি এটি উত্পাদন ব্যবহার করা হবে use


4
অনেক লোক এখন গ্যাং অফ ফোর বইয়ের নকশার নিদর্শনগুলির ভূমিকা হিসাবে সামগ্রীর দিক থেকে খুব ভারী বলে বিবেচনা করে। একটি জনপ্রিয় বিকল্প হ'ল ফার্স্ট: ডিজাইন প্যাটার্নস যা হালকা পাঠের জন্য তৈরি করে। amazon.co.uk/Head-First-Design-Patterns-Freeman/dp/0596007124
বেন্দিহসান

4
"বেশ কয়েকটি ক্লাস জুড়ে আপনি একই পদ্ধতিগুলি সংজ্ঞায়িত করেন এমন ক্ষেত্রে নজর রাখুন; সেগুলি দুর্দান্ত পরিস্থিতি যেখানে আপনি এই পদ্ধতিগুলি বেস শ্রেণিতে তৈরি করতে পারেন" " এই পদ্ধতিগুলি সংজ্ঞায়িত করতে কোনও বৈশিষ্ট্য ব্যবহার করে কোনও শ্রেণি বাড়াতে কী সুবিধা হবে?
ড্যানিয়েল ওয়েইনার

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

12

বাস্তবায়ন:

ইন্টারফেসগুলি বিমূর্ত ক্লাস, তাই আপনি কেবল জিনিসগুলিই ঘোষণা করতে পারেন। একটি শ্রেণি একটি ইন্টারফেস প্রয়োগ করে। আপনি একাধিক ইন্টারফেস প্রয়োগ করতে পারেন ।

প্রসারিত করা:

আপনি যখন ক্লাসের আরও নির্দিষ্ট সংস্করণ চান তখন আপনি ক্লাসগুলি প্রসারিত করুন

উদাহরণ:

// Contract: a pet should play
public interface Pet {
    public void play(); 
}

// An animal eats and sleeps
class Animal {
    public void eat();
    public void sleep();
}


public class Camel extends Animal {

}

public class Dog extends Animal implements Pet {    
    public void play() {...}
}

উট এবং কুকুর উভয়ই প্রাণী, তাই তারা শ্রেণিবদ্ধ করে Animal। কিন্তু কুকুর একটি হল নির্দিষ্ট ধরনের এর Animalযে এছাড়াও একটি হতে পারেPet

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