> > > آموزش زبان برنامه نویسی پایتون از 0 تا 100
> > > قسمت دوازدهم
سلام خدمت همه علاقه مندان به پایتون.
در قسمت قبلی از لیست ها و تفاوتشون با رشته ها گفتیم، و معنی متد رو هم فهمیدیم و چند متد خوب هم یاد گرفتیم.
انتظار من از شما این بوده و هست که فقط به این آموزش اتکا نکنید، همونطور که گفتم متد های زیاد و پرکاربردی وجود داره که میتونید یاد بگیرید و یک پله از بقیه بالاتر باشید.
در این قسمت قرار شد با مفهوم کتابخانه آشنا بشید و همچنین دوست دارم با مفهوم تابع هم آشناتون کنم.
شاید دوستانی که کمی با پایتون آشنایی دارند بپرسن پس دیکشنری ها و چندتایی ها و ست ها رو کی یاد میدی؟
عجله نکنید، حالا که کمی کد نویسی پایتون رو بلد هستین بهتره تابع رو یاد بگیرید و بقیه مثال هامون همگی در توابع باشن که اینا خودش تمرینای خوبی میشه براتون. و بعد از این که توابع و دیکشنری ها و ست ها و چند تایی ها رو یاد گرفتیم، میرسیم به حلقه for. چون حلقه for در پایتون بر روی اشیا عمل میکنه که قابل پیمایش هستند، و وقتی آموزش این اشیا هنوز تکمیل نشده، آموزش حلقه for و نحوه کارکردنش سردرگمتون میکنه.
همچنین این آموزش مثل بقیه آموزش هایی که حد اقل خودم دیدم و خوندم (بالاخره منم یه زمانی مشغول یادگیری بودم دیگه) نیست، فرقش چیه؟
مثال بستن پیچ با دست یا آچار فرانسه ! پایتون یک زبان شئ گراست، و برای این شئ گرایی ابزار قوی هم داره، ولی اگر به اکثر برنامه نویسان پایتون در ایران بگید برای شما برنامه پایتون بنویسند، شاید همشون برنامه رو بدون استفاده از شی گرایی بنویسند !
البته مقصر اونها نیستند، مقصر آموزنده ای بوده که 20 فصل پایتون آموزش داده ولی فقط در فصل بیستم شئ گرایی رو توضیح داده و آموزش تمام شده !
اما من قصد دارم هرچه زود تر وارد شئ گرایی بشیم، حتی اگر شده قبل از حلقه for و چند ساختار داده ای دیگه.
> > > قسمت دوازدهم
سلام خدمت همه علاقه مندان به پایتون.
در قسمت قبلی از لیست ها و تفاوتشون با رشته ها گفتیم، و معنی متد رو هم فهمیدیم و چند متد خوب هم یاد گرفتیم.
انتظار من از شما این بوده و هست که فقط به این آموزش اتکا نکنید، همونطور که گفتم متد های زیاد و پرکاربردی وجود داره که میتونید یاد بگیرید و یک پله از بقیه بالاتر باشید.
در این قسمت قرار شد با مفهوم کتابخانه آشنا بشید و همچنین دوست دارم با مفهوم تابع هم آشناتون کنم.
شاید دوستانی که کمی با پایتون آشنایی دارند بپرسن پس دیکشنری ها و چندتایی ها و ست ها رو کی یاد میدی؟
عجله نکنید، حالا که کمی کد نویسی پایتون رو بلد هستین بهتره تابع رو یاد بگیرید و بقیه مثال هامون همگی در توابع باشن که اینا خودش تمرینای خوبی میشه براتون. و بعد از این که توابع و دیکشنری ها و ست ها و چند تایی ها رو یاد گرفتیم، میرسیم به حلقه for. چون حلقه for در پایتون بر روی اشیا عمل میکنه که قابل پیمایش هستند، و وقتی آموزش این اشیا هنوز تکمیل نشده، آموزش حلقه for و نحوه کارکردنش سردرگمتون میکنه.
همچنین این آموزش مثل بقیه آموزش هایی که حد اقل خودم دیدم و خوندم (بالاخره منم یه زمانی مشغول یادگیری بودم دیگه) نیست، فرقش چیه؟
مثال بستن پیچ با دست یا آچار فرانسه ! پایتون یک زبان شئ گراست، و برای این شئ گرایی ابزار قوی هم داره، ولی اگر به اکثر برنامه نویسان پایتون در ایران بگید برای شما برنامه پایتون بنویسند، شاید همشون برنامه رو بدون استفاده از شی گرایی بنویسند !
البته مقصر اونها نیستند، مقصر آموزنده ای بوده که 20 فصل پایتون آموزش داده ولی فقط در فصل بیستم شئ گرایی رو توضیح داده و آموزش تمام شده !
اما من قصد دارم هرچه زود تر وارد شئ گرایی بشیم، حتی اگر شده قبل از حلقه for و چند ساختار داده ای دیگه.
کتابخانه چیه و به چه دردی میخوره؟
فکر کنم یه مثال جالب بتونم بزنم، پس خوب دقت کنید:
فرض کنید شما یک نجار هستید، ابزار و سایل مورد نیاز شما هم فقط ایناست :
میخ، چکش، چوب.
اگر چکش شما اطلاعاتی از میخ داشته باشه و طبق اون اطلاعات ساخته شده باشه، شما فقط میتونید باهاش میخ بکوبید، ولی اگر صرفا برای ضربه زدن درست شده باشه، شما میتونید تو %90 جاهایی که نیاز به ضربه زدن دارید ازش استفاده کنید. همچنین میخ هم یه همین شکل، اگر راجع به ساختار چوب و چکشی که قراره بش ضربه بزنه و ... بدونه، فقط تو همین شرایط میشه ازش استفاده کرد، ولی اگر فقط برای فرو رفتن در هرچیزی ساخته شده باشه، همیشه مورد استفاده قرار میگیره.
اگر مطلب بالا رو درک کردید، بهتون تبریک میگم، چون شما شئ گرایی رو درک کردید !
در شئ گرایی فقط شما که برنامه نویس هستید از اشیا مختلف برنامتون آگاه هستین و تا اونجا که ممکنه اشیا نباید از هم آگاه باشن، مثل یک نجار که از ابزار و وسایلش آگاهه.
در این صورت میتونید در برنامه های دیگه هم از اون اشیا استفاده کنید.
کتابخانه به یک یا چند قطعه کد برنامه نویسی، و گاهی اوقات هم یک یا چند فایل که هر کدوم شامل یک یا چند قطعه کد برنامه نویسی هستند،گفته میشه.
اگر این کتابخانه به صورت کاملا شئ گرا پیاده سازی شده باشه شما همه جا میتونید ازش استفاده کنید، و اگر شی گرایی در اون کتابخانه ضعیف باشه، فقط در موارد خاص میتونید ازش استفاده کنید.
هر کسی میتونه یک کتابخانه برنامه نویسی بنویسه، ولی هر کسی نمیتونه یک کتابخانه قوی برنامه نویسی درست کنه.
برای مثال کتابخانه جنگو (django):
یک چهارچوب نرم افزاری قوی برای ساختن برنامه های وب با قدرت و کیفیت بالا.
کتابخانه جنگو از چند کتابخانه دیگر تشکیل شده که شما میتونید جداگانه از آن کتابخانه ها بدون استفاده از جنگو نیز استفاده کنید، که مثال خوبی از شئ گرایه.
فکر کنم یه مثال جالب بتونم بزنم، پس خوب دقت کنید:
فرض کنید شما یک نجار هستید، ابزار و سایل مورد نیاز شما هم فقط ایناست :
میخ، چکش، چوب.
اگر چکش شما اطلاعاتی از میخ داشته باشه و طبق اون اطلاعات ساخته شده باشه، شما فقط میتونید باهاش میخ بکوبید، ولی اگر صرفا برای ضربه زدن درست شده باشه، شما میتونید تو %90 جاهایی که نیاز به ضربه زدن دارید ازش استفاده کنید. همچنین میخ هم یه همین شکل، اگر راجع به ساختار چوب و چکشی که قراره بش ضربه بزنه و ... بدونه، فقط تو همین شرایط میشه ازش استفاده کرد، ولی اگر فقط برای فرو رفتن در هرچیزی ساخته شده باشه، همیشه مورد استفاده قرار میگیره.
اگر مطلب بالا رو درک کردید، بهتون تبریک میگم، چون شما شئ گرایی رو درک کردید !
در شئ گرایی فقط شما که برنامه نویس هستید از اشیا مختلف برنامتون آگاه هستین و تا اونجا که ممکنه اشیا نباید از هم آگاه باشن، مثل یک نجار که از ابزار و وسایلش آگاهه.
در این صورت میتونید در برنامه های دیگه هم از اون اشیا استفاده کنید.
کتابخانه به یک یا چند قطعه کد برنامه نویسی، و گاهی اوقات هم یک یا چند فایل که هر کدوم شامل یک یا چند قطعه کد برنامه نویسی هستند،گفته میشه.
اگر این کتابخانه به صورت کاملا شئ گرا پیاده سازی شده باشه شما همه جا میتونید ازش استفاده کنید، و اگر شی گرایی در اون کتابخانه ضعیف باشه، فقط در موارد خاص میتونید ازش استفاده کنید.
هر کسی میتونه یک کتابخانه برنامه نویسی بنویسه، ولی هر کسی نمیتونه یک کتابخانه قوی برنامه نویسی درست کنه.
برای مثال کتابخانه جنگو (django):
یک چهارچوب نرم افزاری قوی برای ساختن برنامه های وب با قدرت و کیفیت بالا.
کتابخانه جنگو از چند کتابخانه دیگر تشکیل شده که شما میتونید جداگانه از آن کتابخانه ها بدون استفاده از جنگو نیز استفاده کنید، که مثال خوبی از شئ گرایه.
زبان برنامه نویسی پایتون نیز ابزار قدرتمندی برای کار با کتابخانه ها و ایجاد کردنشون فراهم کرده.
همچنین خود زبان پایتون هم دارای یک کتابخانه استاندارد و قوی و جامع نیز هست.
در ادامه این قسمت ساختار تابع رو براتون شرح میدم و در فصل بعدی بعد از نوشتن اولین تابعمون، اون رو تبدیل به کتابخانه میکنیم.
همچنین خود زبان پایتون هم دارای یک کتابخانه استاندارد و قوی و جامع نیز هست.
در ادامه این قسمت ساختار تابع رو براتون شرح میدم و در فصل بعدی بعد از نوشتن اولین تابعمون، اون رو تبدیل به کتابخانه میکنیم.
توابع در پایتون قدرت زیادی دارند، این رو نه تنها وقتی تابع رو یاد بگیرید حس میکنید، بلکه وقتی مبحث decorator (که خیلی از پایتون کاران ایران اسمش رو شاید نشنیده باشند) رو بگم واقعا میبینید که توابع در پایتون با توابع در خیلی از زبان های دیگه قابل مقایسه نیستند.
_خوب قبلا هم گفتم تابع یک قطعه کد هستش که وظیفه ی خاصی داره (این وظیفه رو ما براش تعیین میکنیم).
_تابع میتونه یک یا چند ورودی داشته باشه، که در بدنه ی خودش روی اون ورودی یا ورودی ها کار بکنه.
_تابع میتونه خروجی داشته باشه و هم میتونه خروجی نداشته باشه(مثلا فقط یک عبارت رو چاپ کنه).
_متغیر هایی که داخل تابع میسازیم رو به اصطلاح بهشون متغیر محلی گفته میشه و خارج از تابع نمیشه ازشون استفاده کرد.
_همچنین داخل بدنه ی تابع هم نمیشه از متغیر های خارج از تابع استفاده کرد مگر این که قبل از نوشتن تابع اون متغیر ها رو دستکاری کنیم، که یاد میدم بهتون.
_در تابع میتونید تابع یا توابع دیگری رو صدا بزنید.
_توابع رو میشه با عمل نسبت دهی به یک متغیر نسبت داد.
_تابع میتونه یک یا چند ورودی داشته باشه، که در بدنه ی خودش روی اون ورودی یا ورودی ها کار بکنه.
_تابع میتونه خروجی داشته باشه و هم میتونه خروجی نداشته باشه(مثلا فقط یک عبارت رو چاپ کنه).
_متغیر هایی که داخل تابع میسازیم رو به اصطلاح بهشون متغیر محلی گفته میشه و خارج از تابع نمیشه ازشون استفاده کرد.
_همچنین داخل بدنه ی تابع هم نمیشه از متغیر های خارج از تابع استفاده کرد مگر این که قبل از نوشتن تابع اون متغیر ها رو دستکاری کنیم، که یاد میدم بهتون.
_در تابع میتونید تابع یا توابع دیگری رو صدا بزنید.
_توابع رو میشه با عمل نسبت دهی به یک متغیر نسبت داد.
از جلسه ی بعد که تابع رو یاد بگیرید وارد مرحله ی جدیدی از برنامه نویسی در پایتون میشیم.
مطمئنا از همه چیز هایی که تا الان یاد دادم در توابع مثال میزنم و فهمیدن توابع لازمش اینه که هر چی تا اینجا گفته شده رو به خوبی یاد گرفته باشید.
برای همین هم تصمیم گرفتم یک تمرین بهتون بدم.
مطمئنا از همه چیز هایی که تا الان یاد دادم در توابع مثال میزنم و فهمیدن توابع لازمش اینه که هر چی تا اینجا گفته شده رو به خوبی یاد گرفته باشید.
برای همین هم تصمیم گرفتم یک تمرین بهتون بدم.
حلقه ای بنویسید که یک لیست که شامل عضو هایی که از نوع رشته هستند رو پیمایش کنه.
اگر رشته ی داخل حلقه یکی از اعداد بین 0 تا 9 رو داخلش داشت، باید تمام اعداد رو در اون رشته جمع کنه و چاپ کنه و سراغ رشته بعد بره.
اگر هم عدد وجود نداشت باید حروف رشته رو از آخر به اول در هر خط چاپ کنه.
به تمرین خوب دقت کنید.
👇👇👇👇👇
mylist = ["FEDCBA", "@PersianDeveloper is #1 channel !", "1p2y3t4h5o6n7"]
فرض کنید لیست بالا رو بدن به برنامتون،
خروجی شما باید بشه:
👇👇👇👇👇
اگر رشته ی داخل حلقه یکی از اعداد بین 0 تا 9 رو داخلش داشت، باید تمام اعداد رو در اون رشته جمع کنه و چاپ کنه و سراغ رشته بعد بره.
اگر هم عدد وجود نداشت باید حروف رشته رو از آخر به اول در هر خط چاپ کنه.
به تمرین خوب دقت کنید.
👇👇👇👇👇
mylist = ["FEDCBA", "@PersianDeveloper is #1 channel !", "1p2y3t4h5o6n7"]
فرض کنید لیست بالا رو بدن به برنامتون،
خروجی شما باید بشه:
👇👇👇👇👇
این پیام راهنمایی تمرین بالاست.
(میتونید راهنمایی رو فعلا نخونید و اگر بعدا بهش نیاز پیدا کردین کافیه هشتگ بالای همین پیام (#pyg12) رو جستجو کنید).
راهنمایی:
باید یک حلقه اصلی بنویسید که داخل خودش 3 حلقه ی دیگه داشته باشه،
حلقه اول برای پردازش عضو که عدد درش هست یا نه
حلقه ی دوم برای جمع اعداد موجود در عضو
حلقه ی سوم برای چاپ کردن حروف رشته از آخر به اول.
(میتونید راهنمایی رو فعلا نخونید و اگر بعدا بهش نیاز پیدا کردین کافیه هشتگ بالای همین پیام (#pyg12) رو جستجو کنید).
راهنمایی:
باید یک حلقه اصلی بنویسید که داخل خودش 3 حلقه ی دیگه داشته باشه،
حلقه اول برای پردازش عضو که عدد درش هست یا نه
حلقه ی دوم برای جمع اعداد موجود در عضو
حلقه ی سوم برای چاپ کردن حروف رشته از آخر به اول.
برنامتون رو در صورت درست بودن در یک فایل پایتون ذخیره کنید و برام بفرستید :
@PuriYa95
در جلسه بعد مرتب ترین و بهترین جواب درست رو به عنوان پاسخ تمرین در کانال قرار میدم.
@PuriYa95
در جلسه بعد مرتب ترین و بهترین جواب درست رو به عنوان پاسخ تمرین در کانال قرار میدم.
در این جلسه قصد داریم مفهوم کلی شی گرایی در محیط پیرامونی و همچنین استفاده از این فرآیند را در مبحث برنامه نویسی دنبال کنیم درک مبحث شی گرایی بسیار بسیار بحث مهم و کلیدی در پیاده کردن پروژه های مختلف می باشد درک کامل شی گرایی باعث می شود که برنامه نویس بتواند دید بهتر و جامع تری تسبت پیاده کردن پروژه داشته باشد
مفهوم شی گرایی
در طی ده ها سال از ایجاد و بکارگیری کامپیوتر تاکنون در زمینه های مختلف ، کامپیوتر پیشرفت چشمگیری داشته است.
در نرم افزار،از برنامه های به زبان ماشین به نرم افزارهای هوشمند و زبانهای نسل چهارم رسیده ایم.کاربرد کامپیوتر و نرم افزار در تمام سطوح فراگیر شده است . و نیازهای بشری به شدت گسترش پیدا کرده است و کامپیوتر در تمام زوایای زندگی بشر رسوخ کرده و خواهد کرد ، در چنین وضعیتی لازم است:
1-همه افراد توانی ها و سواد کامپیوتری لازم را داشته باشند .
2-کسانیکه در رشته کامپیوتر فعالیت می کنند باید با ایده ها و روشها و تکنیکهای جدید آشنایی کامل داشته باشند ، یکی از این ایده ها ، برنامه نویسی شی ء گرایی است .
در طی ده ها سال از ایجاد و بکارگیری کامپیوتر تاکنون در زمینه های مختلف ، کامپیوتر پیشرفت چشمگیری داشته است.
در نرم افزار،از برنامه های به زبان ماشین به نرم افزارهای هوشمند و زبانهای نسل چهارم رسیده ایم.کاربرد کامپیوتر و نرم افزار در تمام سطوح فراگیر شده است . و نیازهای بشری به شدت گسترش پیدا کرده است و کامپیوتر در تمام زوایای زندگی بشر رسوخ کرده و خواهد کرد ، در چنین وضعیتی لازم است:
1-همه افراد توانی ها و سواد کامپیوتری لازم را داشته باشند .
2-کسانیکه در رشته کامپیوتر فعالیت می کنند باید با ایده ها و روشها و تکنیکهای جدید آشنایی کامل داشته باشند ، یکی از این ایده ها ، برنامه نویسی شی ء گرایی است .
همچنین نیازهای جوامع بشری به شدت گسترش پیدا کرده است . و همین موجب مطرح شدن مفهوم ((سامانه پیچیده )) و ((سیستم پیچیده )) شده است . اغلب پدیده های طبیعی و بسیاری از ساخته ها و آفرینشهای امروزین بشر را باید تحت عنوان رده عام – سامانه پیچیده یا سیستم پیچیده (complex systems) به بررسی و مطالعه نشست . مثالهای زیادی را می شود برای این سامانه ها ذکر کرد مانند سامانه اقتصاد یا سامانه کارت سوخت و انرژی
سیستمهای پیچیده :سازمانها مصداق کامل سیستمهای پیچیده هستند ، پیچیدگی سیستمها نه فقط به تعدد و تنوع اجزای سیستم و متغیرهای اثر گذار بر رفتار آنها مربوط می شود . بلکه به تنوع ارتباطات فیما بین اجزاء و محیط از سویی و به متغیر بودن جهت و شدت تاثیرات متقابل و تعاملات بین اجزاء و محیط از سوی دیگر مربوط است .
مدیریت بر سیستمهای پیچیده مستلزم درک این پیچیدگیها و این ویژگیها است .در این سیستمها بجای تمرکز بر نقطه بروز مساله و سعی در زدودن نشانه های مساله ، باید بر رفتار سیستم پدید آورنده مساله تمرکز کرد .
سیستمهای پیچیده :سازمانها مصداق کامل سیستمهای پیچیده هستند ، پیچیدگی سیستمها نه فقط به تعدد و تنوع اجزای سیستم و متغیرهای اثر گذار بر رفتار آنها مربوط می شود . بلکه به تنوع ارتباطات فیما بین اجزاء و محیط از سویی و به متغیر بودن جهت و شدت تاثیرات متقابل و تعاملات بین اجزاء و محیط از سوی دیگر مربوط است .
مدیریت بر سیستمهای پیچیده مستلزم درک این پیچیدگیها و این ویژگیها است .در این سیستمها بجای تمرکز بر نقطه بروز مساله و سعی در زدودن نشانه های مساله ، باید بر رفتار سیستم پدید آورنده مساله تمرکز کرد .
در این سیستمها ، آنچه مهم است (( چه باید باشد )) و ((چگونه باید باشد )) مهم است . مهندسان نرم افزار در تحلیل سیستمهای پیچیده می باید چگونگی و چرایی رفتار آن سیستم را نه فقط بررسی کنند بلکه باید این چگونگی و چرایی را به تصویر بکشند و در نهایت بصورت نرم افزار در آورند.
پیچیدگی نرم افزارهای مورد تقاضا روز به روز بیشتر می شود در حالی که ما در برخورد با این پیچیدگیها بطور بنیادی محدود هستیم . ما چه خواهیم کرد راه کار چیست ؟
تنها یک راه وجود دارد و آن هم استراتژی غلبه بر پیچیدگیها و به نظم در آوردن آشفتگی
به نظم درآوردن آشفتگی
روش چیره شدن بر پیچیدگیها از زمان قدیم شناخته شده است . فاصله بینداز و پیروز شو .
در مواقع طراحی یک سیستم نرم افزاری پیچیده ، تفکیک آن به قسمتهای کوچک و کوچکتر بسیار ضروری است . به گونه ای که بتوانیم هر یک را بطور مستقل مورد توجه قرار دهیم.
پیچیدگی نرم افزارهای مورد تقاضا روز به روز بیشتر می شود در حالی که ما در برخورد با این پیچیدگیها بطور بنیادی محدود هستیم . ما چه خواهیم کرد راه کار چیست ؟
تنها یک راه وجود دارد و آن هم استراتژی غلبه بر پیچیدگیها و به نظم در آوردن آشفتگی
به نظم درآوردن آشفتگی
روش چیره شدن بر پیچیدگیها از زمان قدیم شناخته شده است . فاصله بینداز و پیروز شو .
در مواقع طراحی یک سیستم نرم افزاری پیچیده ، تفکیک آن به قسمتهای کوچک و کوچکتر بسیار ضروری است . به گونه ای که بتوانیم هر یک را بطور مستقل مورد توجه قرار دهیم.
از این رو پس از گستردگی سیستمهای پیچیده ، مهندسی نرم افزار دستخوش تغییرات فراوانی شد ، و روش توسعه نرم افزار مبتنی بر کد نویسی خط به خط با توسعه مبتنی بر شی ء یا مؤلفه جایگزین شد.
تعریف کلی شی :
مؤلفه های نرم افزاری یک قطعه جامع و قابل توسعه می باشد که عملکردش به خوبی تعریف شده است و از طریق واسطها با دیگر مؤلفه ها می تواند ترکیب شده و با همدیگر در تعامل باشند.
مؤلفه های نرم افزاری یک قطعه جامع و قابل توسعه می باشد که عملکردش به خوبی تعریف شده است و از طریق واسطها با دیگر مؤلفه ها می تواند ترکیب شده و با همدیگر در تعامل باشند.
سه هدف اصلی برنامه نویسی مبتنی بر اشیاء:
*غلبه بر پیچیدگی * مدیریت تغییر * قابلیت استفاده مجدد.
غلبه بر پیچیدگی: ما در یک دنیای پیچیده ای از عصر انفجار اطلاعات زندگی می کنیم .طبق تحقیقات انجام گرفته توسط تیمی در دانشگاه برکلی : دنیا ما بین یک و دو اگزا بایت اطلاعات بی نظیر در هر سال تولید می کند که تقریبا 250 مگا بایت برای هر مرد ، زن و بچه در روی زمین است . هر اگزا بایت یک بیلییون گیگا بایت است . در علم کامپیوتر اندازه پیچیدگی نرم افزار به طور قابل توجه در حال افزایش است .. برنامه نویسی مبتنی بر مولفه یک روش موثر با نام تقسیم و غلبه را برای برخورد با پیچیدگی نرم افزار فراهم می کند.
مدیریت تغییر:تغییرات در مهندسی نرم افزار ذاتی است ، تغییر خواسته های کاربران ، تغییر مشخصه ها ، تغییر کارکنان ، تغییر بودجه ، تغییر تکنولوژی و غیره.یکی از اهداف اساسی مهندسی نرم افزار تاکید بر اهمیت مدیریت تغییر می باشد.برنامه نویسی مبتنی بر مولفه یک روش موثر به نام برنامه ریزی برای تغییر و ساخت طراحی را برای برخورد با تغییرات در مهندسی نرم افزار فراهم آورده است . مولفه ها به آسانی با خواسته های جدید و در حال تغییر وفق داده می شوند .
قابلیت استفاده مجدد: نرم افزار با قابلیت استفاده مجدد باعث می شود که طراحی و پیاده سازی فقط یکبار انجام گیرد و در زمینه ها و قلمرو های متفاوتی بارها و بارها مورد استفاده قرار گیرد که قابلیت استفاده مجدد باعث افزایش بازدهی ، بکارگیری مفید از راه حلهای ارائه شده ، اصلاح کیفیت و غیره می باشد. سطوح مختلفی از قابلیت استفاده مجدد نرم افزار وجود دارد برای نمونه کپی کردن کد منبع ، که پایین ترین سطح از قابلیت استفاده مجدد می باشد. کتابخانه ای از توابع رویه ای بهتر از کپی کد منـبع می باشد اما توسعـه پذیر نیست. برنامه نویسی مبتنی بر مولفه سطح بالایی از استفاده مجدد نرم افزار را پشتیبانی می کند. به خاطر اینکه در برگیرنده انواع گوناگونی از استفاده مجدد می باشد.
*غلبه بر پیچیدگی * مدیریت تغییر * قابلیت استفاده مجدد.
غلبه بر پیچیدگی: ما در یک دنیای پیچیده ای از عصر انفجار اطلاعات زندگی می کنیم .طبق تحقیقات انجام گرفته توسط تیمی در دانشگاه برکلی : دنیا ما بین یک و دو اگزا بایت اطلاعات بی نظیر در هر سال تولید می کند که تقریبا 250 مگا بایت برای هر مرد ، زن و بچه در روی زمین است . هر اگزا بایت یک بیلییون گیگا بایت است . در علم کامپیوتر اندازه پیچیدگی نرم افزار به طور قابل توجه در حال افزایش است .. برنامه نویسی مبتنی بر مولفه یک روش موثر با نام تقسیم و غلبه را برای برخورد با پیچیدگی نرم افزار فراهم می کند.
مدیریت تغییر:تغییرات در مهندسی نرم افزار ذاتی است ، تغییر خواسته های کاربران ، تغییر مشخصه ها ، تغییر کارکنان ، تغییر بودجه ، تغییر تکنولوژی و غیره.یکی از اهداف اساسی مهندسی نرم افزار تاکید بر اهمیت مدیریت تغییر می باشد.برنامه نویسی مبتنی بر مولفه یک روش موثر به نام برنامه ریزی برای تغییر و ساخت طراحی را برای برخورد با تغییرات در مهندسی نرم افزار فراهم آورده است . مولفه ها به آسانی با خواسته های جدید و در حال تغییر وفق داده می شوند .
قابلیت استفاده مجدد: نرم افزار با قابلیت استفاده مجدد باعث می شود که طراحی و پیاده سازی فقط یکبار انجام گیرد و در زمینه ها و قلمرو های متفاوتی بارها و بارها مورد استفاده قرار گیرد که قابلیت استفاده مجدد باعث افزایش بازدهی ، بکارگیری مفید از راه حلهای ارائه شده ، اصلاح کیفیت و غیره می باشد. سطوح مختلفی از قابلیت استفاده مجدد نرم افزار وجود دارد برای نمونه کپی کردن کد منبع ، که پایین ترین سطح از قابلیت استفاده مجدد می باشد. کتابخانه ای از توابع رویه ای بهتر از کپی کد منـبع می باشد اما توسعـه پذیر نیست. برنامه نویسی مبتنی بر مولفه سطح بالایی از استفاده مجدد نرم افزار را پشتیبانی می کند. به خاطر اینکه در برگیرنده انواع گوناگونی از استفاده مجدد می باشد.