რა მნიშვნელობა აქვს 'O'-ს სოლიდის ნიმუშში?
sobes.tech AI
პასუხი AI-სგან
'O' মানে Open/Closed Principle (খোলা/বন্ধ নীতি) বোঝায়।
মডিউলগুলি (ক্লাস, ফাংশন ইত্যাদি) সম্প্রসারণের জন্য খোলা, তবে পরিবর্তনের জন্য বন্ধ হওয়া উচিত। এর মানে হল, বিদ্যমান কোড পরিবর্তন না করেই নতুন কার্যকারিতা যোগ করা যায়।
নীতির লঙ্ঘনের উদাহরণ:
// shape প্যাকেজ
type Shape interface {
Type() string
}
type Rectangle struct{}
func (r Rectangle) Type() string {
return "rectangle"
}
type Circle struct{}
func (c Circle) Type() string {
return "circle"
}
// calculator প্যাকেজ
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
switch shape.Type() { // নতুন আকার যোগ করার সময় এই কোড পরিবর্তন করতে হবে
case "rectangle":
// আয়তনের হিসাবের লজিক
case "circle":
// আয়তনের হিসাবের লজিক
}
}
return totalArea
}
নতুন আকার (উদাহরণস্বরূপ, Triangle) যোগ করার জন্য, CalculateArea ফাংশনটি পরিবর্তন করতে হবে।
নীতির অনুসারে উদাহরণ:
// shape প্যাকেজ
type Shape interface {
Area() float64 // Area() পদ্ধতি যোগ করুন
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height // আয়তনের হিসাবের লজিক স্ট্রাকচারে ইনক্যাপসুলেটেড
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius // আয়তনের হিসাবের লজিক স্ট্রাকচারে ইনক্যাপসুলেটেড
}
// calculator প্যাকেজ
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
totalArea += shape.Area() // পলিমরফিজম ব্যবহার করে, নির্দিষ্ট ধরনের জানা ছাড়াই
}
return totalArea
}
এই উদাহরণে, নতুন আকার যোগ করা যা Shape ইন্টারফেসের Area() পদ্ধতিটি বাস্তবায়ন করে, AreaCalculator কোডে পরিবর্তন প্রয়োজন হয় না। AreaCalculator সম্প্রসারণের জন্য খোলা (নতুন Shape ধরনের যোগ), তবে পরিবর্তনের জন্য বন্ধ (নতুন ধরনের যোগের সময় কোড পরিবর্তন না করে)।
এটি পলিমরফিজম এবং ইনক্যাপসুলেশনের মাধ্যমে অর্জিত, যেখানে প্রতিটি আকারের হিসাবের লজিক আলাদা করে রাখা হয়।
এই নীতি আরও নমনীয়, রক্ষণাবেক্ষণযোগ্য এবং সম্প্রসারণযোগ্য কোড তৈরিতে সহায়ক।