Reza Amini
5 سال پیش توسط Reza Amini مطرح شد
18 پاسخ

شی گرا یا فانکشنال مسئله این است

دوستان شما برای چه پروژه هایی فانکشنال رو ترجیح میدید و برای چه پروژه ای شی گرا رو؟
بنظرتون ترکیب این دوتا درست و منطقیه ؟


ثبت پرسش جدید
علی فرمانی
تخصص : فرانت اند
@farmani 5 سال پیش مطرح شد
1

@rezi
ترکیب که پیش میاد زیادم استفاده میشه مشکلی نداره ولی بیس شی گرا خوبه .
ببینید اینجوری بهتون بگم شی گرا کار کنید فانکشنال نمیتونید دیگه کار کنید . نه اینکه نشه ها منظورم اینه دیگه اعصاب فانکشنال رو ندارید و سختیتون میگیره باهاش پروژه بزنید .
مثل ماشین دنده اتومات و دستی میمونه برید اتومات بگیرید بعد یه مدت دستی براتون مشکل میشه .
فانکشنال خوبه ولی برای پروژه های کوچیک ! پروژه بزرگ بشه بعد میشه فاجعه اینقدر کدها و توابه پراکنده دارید معلوم نیست چی به چیه .


Reza Amini
تخصص : PHP/Laravel
@rezi 5 سال پیش مطرح شد
0

بقیه دوستان جوابی نداشتن ؟


Ben Dehqan
تخصص : توسعه دهنده پروژه های فناورمحو...
@ben.dehqan 5 سال پیش مطرح شد
2

برنامه شی گرا یه مشکلی که قبلا داشت این بود که باید تعداد زیادی فایل به همراه کد رو به صورت روتین وار ایجاد میکردید تا بتونید اول ماژول اسکرپیت تون بنویسید و این موضوع از حوصله پروژه های کوچک تر خارج بود!‌ اما الان با وجود دستیارهای خط فرمانی که هست!‌ بیشتر زحمت ایجاد فایل ها را خود اسکرپیت می‌کشه و شما باید روی منطق برنامه تون متمرکز بشید. با این اوضاع مطمئنا شی گرایی برنده مطلق بازیه.


مهدی طهرانی
تخصص : cloud architect
@mtehrani 5 سال پیش مطرح شد
2

@rezi
دوست عزیز پیشنهاد می‌کنم مقاله زیر رو مطالعه کنید
https://medium.com/@cscalfani/goodbye-object-oriented-programming-a59cda4c0e53


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
3

شئ گرایی برای تمام پروژه ها...
حالا اگر چند تا هلپر کوچیک هم داشتیم عیبی نداره اما در کل ساختار برنامه با شئ گرایی خیلی منظم‌تر میشه


مهدی طهرانی
تخصص : cloud architect
@mtehrani 5 سال پیش آپدیت شد
0

@ali.bayat
دوست عزیز شی گرایی مشکلات خیلی زیادی داره که تنها راه حلش purely functional programming هست!
حتما برید راجع بهش تحقیق کنید(واقعیتش اصلا حال ندارم بشینم دقیق اینجا کامل توضیح بدم اما اگه شد حتما مفصل میام اینکارو می‌کنم)


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
1

سلام
@rezi

برنامه نویسی به صورت فانکشنال ، برای پروژه های سطح پایین و کوچک خوبه! کار راه اندازه !
اما توی به برنامه و یه پروژه بزرگ قطعا داستان درست میکنه و اصلا پیشنهاد نمیشه و کمتر کسی هست که بخواد بنویسه!

استفاده از شی گرایی در یک پروژه ، راه رو برای توسعه راحت میکنه
بعد هر قابلیتی خواستید اضافه کنید به پروژه ، این کار منظم و خیلی تمیز براتون پیاده سازی میشه توسط شی گرایی!

این قالب از برنامه نویسی اگر بره سمت معماری MVC که چه بهتر ، خیلی همه چی دسته بندی تر میشه!

شی گرایی رو به چشم یه چیز دست و پا گیر نبینید
به فکر الان پروژه نباشید ، پس فردا روزی 4 تا قابلیتی چیزی بخوایید اضافه کنید ، قابلیت های OOP این کار رو بسیار ساده برای شما انجام میدن
در صورتی که درک درستی ازش داشته باشید


میلاد-م
تخصص : توسعه‌دهنده رابط کاربری - Fron...
@milad 5 سال پیش مطرح شد
-1

@eng.tehrani
با سلام، لطفا خلاصه ای از مقاله ای که قرار دادین همراه با تجارب خودتون بنویسید. چون به جز شما، بقیه میگن شی گرایی؛ حرف شما شنیدن دارن و بعدش هم دوستان می تونند جواب نقدتون رو بدن.


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

@eng.tehrani
درود
ببینید مباحثی که ما در شئ گرایی مثلا در PHP داریم تعداد زیادی ندارند اما درک درست و استفاده صحیح ازشون ممکنه بسیار زمان‌بر باشه..

اما ۱۰۰٪ مزایای خودش رو داره

یه مثال کوچکش سینتکس زیبا و روان فریم‌ورک لاراول هست که به بهترین نحو از شئ گرایی استفاده کرده..

برای پروژه های کوچیک تا متوسط برنامه‌نویسی فانکشنال ممکنه جواب بده
اما برای یه پروژه Enterprise فرض کنید آدم استفاده‌ها و نظم OOP رو نادیده بگیره و برنامه رو پر کنه از توابع با اسمهای عجیب غریب..
تنها توسعه دهنده‌ای که بعدا ممکنه بتونه این چنین پروژه ای رو توسعه بده همون شخصیه که این کدها رو نوشته..

و معمولا چنین پروژه های بزرگی یه تیم بزرگ از توسعه دهنده‌ها دارند که همه یه استاندارد رو رعایت می‌کنند به همین خاطر هم می‌تونند کار رو به صورت گروهی پیش ببرند.

قانون دوم‌ SOLID یا همون حرف O مربوط به این عبارته: Open for Extention but Close to Modification

به این معنا که کدهای ما باید بدون نیاز به تغییر (Modification) قابل توسعه باشند.

این اصل به طور کلی در برنامه‌نویسی فانکشنال نقض میشه.


چنانچه شما تجربه‌ای داشتید که در اون شئ گرایی باعث بوجود اومدن مشکلی شده.... یا مثال قابل لمسی از مشکلات زیاد شئ گرایی که گفتید دارید; با دوستان به اشتراک بگذارید، بقیه هم استفاده کنند.


مهدی طهرانی
تخصص : cloud architect
@mtehrani 5 سال پیش آپدیت شد
2

@ali.bayat
@Alimotreb
@milad
دوستان منظور بنده pure functional هست مثل haskell و elm و غیره که داده‌ها در اون immutable هست ولی php اینطور نیست و داده‌ها در اون mutable هست!
بنده 15 سال برنامه نویسی میکنم و با دات نت و جاوا و php و js و غیره ... از پروژه‌های کوچک تا سازمانی انجام دادم به پترن‌ها و اصول شی‌گرایی هم مسلط هستم تا یک سال پیش هم طرفدار شی گرایی بودم ولی وقتی پروژه آخرم رو که با معماری میکروسرویس بر بستر سیستم‌های توزیع شده راه اندازی کردم اونجا به مشکلاتی تنیدگی برخوردیم که مشکل از شی گرایی بود و اصولا با شی گرایی استفاده مجدد و همچنین concurrency خیلی سخت و حتی ناممکن میشه! شما اگه با فلسفه یونیکس آشنا باشید کلا شی گرایی بر خلاف فلسفه یونیکس هست و با purely functional این مشکلات حل میشه و اون فلسفه‌ی زیبا و کاربردی یونیکس محقق میشه.
داستان خیلی طولانیه ولی شی گرایی به درد پروژه های خیلی بزرگ و توزیع شده نمیخوره و مشکلات زیادی به بار میاره و شما اگه با pure functional آشنا بشید متوجه خیلی از مشکلات میشید و میفهمید که شی گرایی چه دروغی بهتون گفته البته توی زبان های دیگه هم میتونید این پارادایم رو داشته باشید و منحصر به زبان خاصی نیست خیلی هم مبحثش طولانیه که در این مجال نمی‌گنجه :)


مهدی طهرانی
تخصص : cloud architect
@mtehrani 5 سال پیش مطرح شد
1

این مقاله رو هم بخونید ترجمه همون مقاله انگلیسی هست که گذاشتم
https://www.zoomit.ir/2019/2/22/313073/object-oriented-programming-end/


مهدی طهرانی
تخصص : cloud architect
@mtehrani 5 سال پیش مطرح شد
1

یه نکته موند اونم اینکه erlang و elixir و clojure و scala و ‌... اینا هم impure هستن اما قدرت فانکشنال بالایی دارن و بسیار محبوب و کاربردی هستن و کلا رشد زبان‌های فانکشنال و حتی پروسیجال روز به روز داره بیشتر میشه ولی php خیلی بد فانکشنال رو جا انداخته و اصلا ملاک خوبی برای قضاوت نیست چون اساسا مفاهیم فانکشنال رو اصلا پیاده سازی نکرده!


محمد سلمانی
تخصص : برنامه نویس php , laravel
@mohammadsalmani28 5 سال پیش مطرح شد
1

برای تمامی پروژه ها شیء گرا رو پیشنهاد می دم چون برنامه نویسی شیء گرا بیشتر به واقعیت نزدیکه و تمامی مدل سازی ها قرار هست که شبیه به واقعیت باشه ....
اما اگر قراره که کدی که زده می شه در حد یه اسکریپت کوچیک باشه و پروژه ی خیلی بزرگی نباشه می تونه فانکشنال نوشته بشه.


مهدی طهرانی
تخصص : cloud architect
@mtehrani 5 سال پیش آپدیت شد
0

@mohammadsalmani28
اتفاقا دلیل محبوبیت شی گرایی و تنها مزیتش نسبت به فانکشنال همینه چون طبق دنیای واقعی و بیرونه خیلی درکش آسونه و کار باهاش راحته ولی فانکشنال چون یک شیوه‌ی ریاضی درکش سخته و کار باهاش اول کمی پیچیده است برای ذهن! ولی خب برای ماشین راحت‌تره و اصولا همینجوره دیگه اون چیزی که برای انسان راحته برای ماشین سخته و اون چیزی که برای انسان سخته برای ماشین راحته!
ولی خب این راحتی اولیه شی گرایی حتی برای خود انسان هم در مقیاس بزرگ مشکل ایجاد میکنه و اصولا دیزاین پترن‌ها بوجود اومدن که این مشکلات رو برطرف کنن ولی بعضا خودشون آنتی پترن شدن!
در صورتی که در فانکشنال دیزاین پترن وجود نداره و اصولی داره و شما مجبور به رعایت اصول هستید! حتما برید تجربه کنید دنیای pure functional ها خیلی منطقی‌تر و زیباتره
بنده ١۵ سال بشدت شی‌گرا بودم (هر چی باشه دات نت کار و لاراول کار بودم) ولی بعدا نظرم عوض شد حتی پروسیجال خیلی بهتر از شی گراییه خصوصا زبان گو که واقعا دوست داشتنیه و بر اساس فلسفه یونیکس خلق شده


مهدی طهرانی
تخصص : cloud architect
@mtehrani 5 سال پیش مطرح شد
0

در ضمن این اشتباهه که فکر میکنید فانکشنال برای پروژه‌های کوچیک خوبه و شی گرایی برای همه‌ی پروژه‌ها! اینم بخاطر اینه که php که یه زبون واقعا مزخرفه اصول فانکشنالو رعایت نکرده و اسم فانکشنالو خراب کرده!
اتفاقا شی گرایی تا یه حدی دووم میاره و پروژه‌های خیلی بزرگ ناچار به استفاده از پارادایم‌های پروسیجال یا فانکشنال هستن!


مهدی طهرانی
تخصص : cloud architect
@mtehrani 5 سال پیش مطرح شد
0

این نکته رو هم بگم شما در شی‌گرایی شاید بتونید به loosely couple برسید اما هرگز به decoupling نمیشه رسید در صورتی که فانکشنال‌ها بذات decouple هستن!


Farshad
@fashionmetal1359 4 سال پیش مطرح شد
1

سلام.برنامه نویسی فانکشنال خیلی بهتر از برنامه نویسی شی گرا هستش و بیشتر استادان بزرگ کامپیوتر هم مخالف شی گرایی هستن مثل بیارنه استراستروپ که زبان c رو شی گرا کرد و ++c رو بوجود آورد.این رو توی مصاحبش توی سایت رسمی ++c میتونید ببینید.آلن کی که شی گرایی رو بوجود آورد اعتقاد داره که هیچکدوم از زبانهای شی گرا نتونستن شی گرایی واقعی رو پیاده کنند به جز زبان Small Talk که خود آلن کی بوجود آوردش.و اینکه شی گرایی پروژه های بزرگ رو پیچیده میکنه برعکس اعتقاد بیشتر دوستان.اگه مقالات خارجی و مصاحبه های آلن کی رو بخونید بهتر متوجه میشید.از بین زبانهای مدرن فقط زبان روبی تونسته تا حد زیادی نظر آلن کی رو جلب کنه و اینکه شی گرایی در جاوااسکریپت که اینقدر ازش انتقاد میشه از نظز علمی بهتر از شی گرایی زبانهایی مثل جاوا و سی شارپ هستن چون شی گرا نیست بلکه مبتنی بر شی هستش و کار برنامه نویس رو خیلی راحتتر میکنه.ببخشید که خیلی طولانی شد. با سپاس.


ابوالفضل
تخصص : برنامه نويس
@amata 2 سال پیش مطرح شد
0

این حرف شما یکم عجیب بود
شما طرفدار میکروسرویس هستید ولی طرفدار شی گرایی نه؟
اینکه برنامه نویسی فانکشنال رو به شی گرایی ترجیح میدین ممکنه دلیلش این باشه که اسکیل پروژه هایی که انجام دادین خیلی بزرگ نبوده باشه

یا اینکه ممکنه به خاطر اون اتفاقی که توی میکروسرویس افتاد به همچین باوری رسیده باشین
و خب باید این رو دقت کنید که میکروسرویس حاوی ده ها پروژه ی خیلی کوچیکه!
شاید علتش همین بوده باشه که فانکشنال بهتون بیشتر چسبیده باشه


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام