PDA

View Full Version : استفاده از یک تابع در کل پروژه



rahele_sa
چهارشنبه 04 بهمن 1385, 14:19 عصر
سلام

من یک تابع نوشتم . حالا می خواهم این را به صورت Global در بیارم که از هر فرم سایت قابل دستری باشه (یعنی بشه صداش کرد)

من تو Syntax ویژوال بیسیک که بودم یک Class می ساختم و براحتی از اون در دیگر قسمتها استفاده می کردم


اما حالا که اومدم #C متاسفانه ساختار Class آن خیلی فرق کرده !

ممنون میشم اگر به من بگوئید که این تابع ام را چگونه درون این Class جا بدهم

البته تو جستجو هایی که کرد بودم دیدم بعضی های class را تبدیل به Moudle می کردن در VB اما متاسفانه نمی دونم #C چرا نمیشه این کار را کرد .


با تشکر !

سار
چهارشنبه 04 بهمن 1385, 14:27 عصر
می خوای DLL بسازی یا فقط Global تعریف کنی؟

rahele_sa
چهارشنبه 04 بهمن 1385, 14:31 عصر
فقط Global ؟

سار
چهارشنبه 04 بهمن 1385, 15:00 عصر
موقع تعریف از public static استفاده کن.
مثل این :


public static void f()
{
}


به جای Void هم نوع خروجیت رو بنویس اگر هم نداره همون Void بنویس.
در کلاس ها هم با همین public میتونی عمومیش کنی.

rahele_sa
چهارشنبه 04 بهمن 1385, 17:36 عصر
ممنون از شما

ببنید من یک Class ساختم که ساختار کلی آن به صورت زیر است :



using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
public Class1()
{
//
// TODO: Add constructor logic here
//
}
}



این کدی که شما گفتی را کجای این ساختار بزارم
بین


public Class1()
{
}

وقتی مذارم خطا میدهد

Navid7h
پنج شنبه 05 بهمن 1385, 01:29 صبح
یک راهش این است که یک کلای بنویسی مثلا به نام myPage
بعد اون رو از Page به ارت ببری !
حالا متدهای دلخواهتو به کلاس myPage اضافه کن.


بعد تمام صفحات خودتو به جای اینکه از Page به ارث بگیری از MyPage ارث بگیر !

این روش جالبیه !

Navid7h
پنج شنبه 05 بهمن 1385, 01:35 صبح
روش دوم



namespace Navid
{
public class myGlobalMethods
{
public static string ConvertToPersianDate (DateTime dt)
{
// sample method
// this method receive one parameter in DateTime Format
// and convert it Hejri shamsi string

return "";
}
}
}

سار
پنج شنبه 05 بهمن 1385, 09:41 صبح
من پیشنهاد بهتری دارم.
از Class Diagram استفاده کنید.
با استفاده از اون میتونید کل کلاس خودتون رو به شکل visual طراحی کنید.
بعد DLL اون رو به resourceهای برنامه اضافه کنید.
کار قشنگتر و بهتریه. البته کد دوستمون Navid7h هم مشکل شما رو حل می کنه.

ali_kolahdoozan
پنج شنبه 05 بهمن 1385, 11:58 صبح
شما توی کلاس یک تابع public بسازید هر جا لازم دارید از کلاس یک object بگیرید و بعد از اسم تابع استفاده کنید همه جا قابل دسترسی است

اَرژنگ
پنج شنبه 05 بهمن 1385, 14:28 عصر
یک راهش این است که یک کلای بنویسی مثلا به نام myPage
بعد اون رو از Page به ارت ببری !
حالا متدهای دلخواهتو به کلاس myPage اضافه کن.


بعد تمام صفحات خودتو به جای اینکه از Page به ارث بگیری از MyPage ارث بگیر !

این روش جالبیه !
مشکل این روش این است که تمامه کلاینتهایه این متد همیشه باید از نوعه MyPage باشند.

اَرژنگ
پنج شنبه 05 بهمن 1385, 14:44 عصر
۱) تابع که چکار کند؟ همینطوری گلوبال درست کردن روشه مبتدی کارانه است.
۲)استفاده از namsapace برایه بهینه کردنه ساختمانه کده نه برایه اینکه هر کی که از راه میرسه اسمش را با یک namespace به کد اضافه کنه، مجسم کنید در یک پروژه که ۱۰ نفر روش کار میکنند بعد از ۶ ماه چه اتفاقی میافته.
۳) استفاده از استاتیک ضروری نیست، این روش غیر شیئگرانه است، به جایه (سوئه) استفاده از استاتیک ، درک مشکل که باید حل بشه واز روش درست شیئگرانه استفاده کردن است.
۴)روشهایی که در وی بی استفاده میشدند ، ممکن است که در سی شارپ جایی نداشته و باید از روشهایه دیگر استفاده بشود،
به جایه ترجمه وی بی به به سی شارپ ، نحوه حل کردن را در سی شارپ یاد گرفتن مهمتر است.
۵) این تابع که باید گلوبال بشه کارش چیه، شاید روش بهتر بشه پیشنهاد کرد.

ali_kolahdoozan
پنج شنبه 05 بهمن 1385, 15:02 عصر
عزیز من شما یک کلاس تعریف کن . توی کلاس هم یک متد فقط public . هر جا لازم داری از کلاس یک شئی بگیر و از متد استفاده کن

اَرژنگ
پنج شنبه 05 بهمن 1385, 15:28 عصر
همینطوری که نمیشه کدها را ریخت تو هر کلاسی، استفاده از اصول برنامه نویسی اصلا مهم نیست ؟

Navid7h
پنج شنبه 05 بهمن 1385, 15:30 عصر
مشکل این روش این است که تمامه کلاینتهایه این متد همیشه باید از نوعه MyPage باشند.

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

Navid7h
پنج شنبه 05 بهمن 1385, 15:35 عصر
همینطوری که نمیشه کدها را ریخت تو هر کلاسی، استفاده از اصول برنامه نویسی اصلا مهم نیست ؟

با نظر شما کاملا موافقم.
اما منظور فقط حل مشکل دوستمون بود.

ایشون باید اطلاعات کامل تری بدن تا بطونیم بگیم دقیقا چجوری و کجا کد نوشته بشه.

از همه دوستان که به هم دیگه کمک میکنن متشکرم.

Behrouz_Rad
پنج شنبه 05 بهمن 1385, 15:42 عصر
در صورتی که قصد دارید تابع یا پروسیجری را به صورت عمومی در برنامه استفاده کنید، باید کلاسی ایجاد کنید که امکان "به ارث بری" از آن غیر ممکن باشد!
طرز تعریف این کلاس در VB.NET با ذکر کلمه ی "NotInheritable" و در #C با ذکر کلمه ی "sealed" میسر خواهد بود.
همچنین، باید امکان New کردن از کلاس نیز گرفته شود که اینکار با Private تعریف کردن متد سازنده ی کلاس انجام می شود. (بهینه)
در صورتی که از #C استفاده می کنی، بهتره که کلاس رو در یک Namespace قرار بدی.
تمامی متدها و پروسیجرهایی که در کلاس تعریف می کنی، در VB.NET به شکل Shared و در #C به شکل static باید تعریف بشن.
پس دوستان متوجه شدند که به New کردن از کلاس نیازی نیست!

موفق باشید.

ali_kolahdoozan
پنج شنبه 05 بهمن 1385, 16:00 عصر
بله بدون new هم میشه .

Navid7h
پنج شنبه 05 بهمن 1385, 16:41 عصر
۳) استفاده از استاتیک ضروری نیست، این روش غیر شیئگرانه است، به جایه (سوئه) استفاده از استاتیک ، درک مشکل که باید حل بشه واز روش درست شیئگرانه استفاده کردن است



تمامی متدها و پروسیجرهایی که در کلاس تعریف می کنی، در VB.NET به شکل Shared و در #C به شکل static باید تعریف بشن.

میشه یکی توضی بده:
آیا واقعا استفاده از static غیر شی گرانه است ؟

اَرژنگ
پنج شنبه 05 بهمن 1385, 17:23 عصر
بستگی به دلیل استفاده از استاتیک داره.
معمولا کسانی که قبلا پاسکال و یا وی بی کار کردن، با استفاده از استاتیک ،روش هایه قدیمی برنامه نویسی تابعی(Procedural Programming) را که بهش عادت دارند را پیاده کنند. وقتی که در کد میبینید از متدهایه استاتیک زیاد استفاده شده دلیلش این است.

در روش شئیگرانه، تابهایه استاتیک به کلاسی که تعریفشان میکنه ربط دارند، مانند String.Format , int.Parse, ...

تابعهایه استاتیک به کلاسی که تعریفشان میکنه و یاکلاساهایه دیگر که بتوننند از همان کلاس استفاده کنند ربط دارند ، در این صورت به حالت شئیگرانه استفاده شدند.
این دوتا را نگاه بندازید:


(1)
public class Myclass{

public static string FormatAsShamsiDate( DateTime ){ return String in Shamsi format}
public static string PersianDecimalFormat( double )
{
return in persian decimal format;
}
public static void FormatReport( Report )
{
Make a datbase report and save to file
}
}


or

(2)

public class MyPersianDate{

public static string FormatAsShamsiDate( DateTime ){ return String in Shamsi format}
}

public class PersianDecimal
{
public static string PersianDecimalFormat( double )
{
return in persian decimal format;
}

}

public class Report
{
public static Formatreport( Report );
}

۱) همینطوری هر تآبعی را ریختهه در یک کلاس (این فقط در نظر از اشیائ استفاده میکنه، و شئیگرآنه نیست)
۲) تابعهایی که به خوده همان کلاس ربط دارند را استفاده میکند (استاتیکها برایه همان کلاس که در داخلش تعریف شدند عمل میکنند)
فقط استفاده از کلاس و خصوصیات یک زبان شئیگرانه دلیل بر کارکردن شئیگرآنه نمیشه، خیلی از وی‌بی و پاسکال کارهایه قدیمی با اینکه در دات نت و یا دلفی برنامه نویسی میکنند ، ولیاسوالشان شئیگرانه (Object Oriented Programming) نیست، بلکه به طریق استفاده از اشیاء (Object Based Programming) است. با ستفاده زیاد از استاتیک ، در حقیقت از همان روشهایه قدیمی (غیره شیئگرانه) تابعی (Procedural Programming) است.

دلیل استفاده از استاتیک برایه جلوگیری از بوجود اوردن اشیاء تولیدی کلاس نیست (new )، اسمه دیگر استاتیک متد ، کلاس متد است، دلیش این است که کلاس متد بررویه کلاس معنی دارد، غیره استاتیک بر هر کدام از اشیاء که کلاس تولید میکند.

ali_kolahdoozan
پنج شنبه 05 بهمن 1385, 20:05 عصر
توی وب متغیر static رو من یکی پیشنهاد نمیکنم . اما تابع static ضرری نداره . فقط مواظب مقدار دهی client ها باش . بعضی وقتها توی static ها یکی در میان

Behrouz_Rad
پنج شنبه 05 بهمن 1385, 23:06 عصر
"آرژنگ"!
با وجود اینکه چندین بار مطلبت رو خوندم اما دقیقا متوجه صحبت هات نشدم. کمی بیشتر در گرامر و املای کلمات دقت کن.
استفاده از مفهوم شی گرا در اینجا بحث ما نیست چون اصلا تعریف شی گرایی در مقوله ی این تاپیک نیست!
استفاده از اصول شی گرایی ربطی به پیشینه ی یک برنامه نویس نداره و باید دید که یک زبان برنامه نویسی اجازه ی پیاده سازی مفهوم شی گرا رو در خود میده یا خیر!
مسلما زمانی که زبان Small Talk با پیاده سازی کامل مفهوم شی گرا ارائه شد، عباراتی همچون داده های Static، کلاس sealed، کلاس NotInheritable و ... وجود نداشتند!

استفاده از هر چیزی دلیلی داره و این دلیل به قانون هایی بر میگرده که در اون زبان وجود دارند.
هر شی یک کلاس دارای کپی خودش از تمام اجزای نمونه ی کلاس هست. در مواردی نیاز هست که تمام کلاس تنها یک کپی از جزیی خاص رو به اشتراک بگذاره. به این جزء خاص، جزء static گفته میشه.
به عبارت دیگه، هنگامی که تنها یک کپی از داده ها کفایت می کنه، از اجزای static برای صرفه جویی در حافظه استفاده می کنیم.

موفق باشید.

اَرژنگ
جمعه 06 بهمن 1385, 04:37 صبح
"آرژنگ"!
با وجود اینکه چندین بار مطلبت رو خوندم اما دقیقا متوجه صحبت هات نشدم. کمی بیشتر در گرامر و املای کلمات دقت کن.


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



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

اگر چه شئی گرائی در مقوله این توپیک نیست، ولی نگفتنش هم جایزنیست. فقط اینکه بگیم برو از استاتیک استفاده کن، جواب کامل نیست.
من با خیلی از برنامه نویسها کار کردم که فقط فکر میکنند دارند شئیگرائی کار میکنند، منتها با ینکه در سی شارپ و یا دلفی کار میکنند، طریق استفاد‌ه‌اشان از زبان همانطوری است که با باسکال و یا وی‌بی کار میکردند.
مثالا استفاده زیاد از استاتیک را در نظر بگیرید. در برنامه نویسی شئیگرایی دلیل استفاده از استاتیک هیچ ربطی برایه دسترسی به یک تابع گلوبال نیست. وقتی که یک متد باید برایه کلاس تعریف بشه و نه بر اشیاء که از کلاس بدست میاند، از استاتیک استفاده میشه. منتها برنامه نویسهایی که پیشینه‌شان شیگرایی نبوده، با استفاده از استاتیک کمبود استفاده از روشهایه تابعی را جبران میکنند. یعنی در حقیقت با اینکه در یک زبان شئی‌گرایی استفاده میکنند، هنوز دارند همان روش تابعی پیشینه‌اشان را ادامه میدند.




به عبارت دیگه، هنگامی که تنها یک کپی از داده ها کفایت می کنه، از اجزای static برای صرفه جویی در حافظه استفاده می کنیم.

دلیله استفاده از استاتیک برایه صرفه جویی در حافظه نیست (مقدار حفظه‌ای که استفاده از استاتیک صرفه‌جویی میکنه ناچیزه)، همانطوری که خودتان فرمودید:



استفاده از هر چیزی دلیلی داره و این دلیل به قانون هایی بر میگرده که در اون زبان وجود دارند.

هر شی یک کلاس دارای کپی خودش از تمام اجزای نمونه ی کلاس هست. در مواردی نیاز هست که تمام کلاس تنها یک کپی از جزیی خاص رو به اشتراک بگذاره. به این جزء خاص، جزء static گفته میشه.

ولی دلیل برایه اشتراک گذاشتن اون جزیات خاص برایه این است که به کلاس ربط داره و نه به اشیاء‌اش.
دلیله استفاده از استاتیک:
http://en.wikipedia.org/wiki/Method_(computer_science (http://en.wikipedia.org/wiki/Method_%28computer_science))
A method may be declared as static (or shared in Visual Basic), meaning that it acts at the class level rather than at the instance level
[/quote]

من با استفاده از استاتیک مشکلی ندارم، ولی اینجا مرجع تخصصی برنامه نویسان است، از برنامه‌نویس‌هایه متخصص بعید است که از استاتیک (سوء)استفاده کنند که همان روشهایه قدیمیه غیره شئی‌گرایشان را ادامه بدند به جایه اینکه در برنامه‌نویسی ترقی کنند و به من هم یک چیزی یاد بدند.
در تمامه این تپیک تنها پستی که ازش یاد گرفتم همان پست شما بود، اگرچه جوابهایه بقیه هم درست بود ولی سطحه پسته شما باعث بالا رفتن سطح این بحث شد. اگرچه همان طوری که گفتید افزایش سطح این توپیک مقول سوال پرسیده شده نبود، ولی اگر ما یکچیزی مربوط میدونیم و به بحث اضافه نکنیم نه درستی دانش خودمان را میتونیم امتحان کنیم و نه به بقیه فاید‌ه‌‌ای داریم.
مخلصیم

Behrouz_Rad
جمعه 06 بهمن 1385, 11:46 صبح
چیزی که در مورد اون داری مرتکب اشتباه میشی اینه که استفاده از اعضای استاتیک رو به شی گرایی نسبت میدی!
شی گرایی ربطی به تکنیک های استفاده شده در یک زبان نداره!
همون طور که قبلا گفتم:


مسلما زمانی که زبان Small Talk با پیاده سازی کامل مفهوم شی گرا ارائه شد، عباراتی همچون داده های Static، کلاس sealed، کلاس NotInheritable و ... وجود نداشتند!


و اما...
گفتی که:


دلیله استفاده از استاتیک برایه صرفه جویی در حافظه نیست (مقدار حفظه‌ای که استفاده از استاتیک صرفه‌جویی میکنه ناچیزه)،

اتفاقا یکی از دلایل مهمش صرفه جویی در حافظه است...
زمانی که پروسه ای اجرا میشه، حافظه ای که برای اون پروسه در نظر گرفته میشه شامل 3 قسمت هست:
1) Stack
Heap (2
Static (3

قسمت Static شامل اعضای static برنامه میشه.
اما اعضای static چی هستند؟
اعضای static، متدها و متغیرهایی هستند که برای استفاده از اونها نیازی به ایجاد یک نمونه ی جدید از کلاس نیست.
تعریف فوق، واضح و روشن هست.

قسمت Static در حافظه وجود داره. در حقیقت به عنوان یک قسمت رزرو شده از پیش تعیین شده.
اگر قرار باشه شیء ای جدید از یک کلاس ایجاد کنی، نیاز به اختصاص حافظه ای جدا در Heap برای اون شی است. (برنامه های دات نت در قسمتی از حافظه ی Heap با نام HFH یا (High Frequency Heap) قرار دارند.)

پس نقش حافظه در اینجا کاملا مشخص هست!
به عنوان یک اصل ثابت در #C، متدها و اعضایی که به چشم یک Utility به اونها نگاه میشه باید به شکل Static تعریف بشن.

موفق باشید.:لبخندساده:

ali_kolahdoozan
جمعه 06 بهمن 1385, 12:06 عصر
!


به عنوان یک اصل ثابت در #C، متدها و اعضایی که به چشم یک Utility به اونها نگاه میشه باید به شکل Static تعریف بشن.



با این قسمت شدیدا موافقم .

اما مسئله ایشون شاید متدهایی است که نقش utility رو ندارن . توی وب استاتیکها بیشتر سر به سر . server میزارن یا new کردن از کلاس؟

Behrouz_Rad
جمعه 06 بهمن 1385, 13:20 عصر
متوجه سوالت نشدم.

اَرژنگ
جمعه 06 بهمن 1385, 18:06 عصر
چیزی که در مورد اون داری مرتکب اشتباه میشی اینه که استفاده از اعضای استاتیک رو به شی گرایی نسبت میدی!
شی گرایی ربطی به تکنیک های استفاده شده در یک زبان نداره!

بنابراین اگر یک برنامه بنویسیمم که همه متدها استاتیک باشند با زهم یک برنامه شئی‌گرائی حساب میشه؟
در این حالت فرق یک برنامه که فقط از متدهایه استاتیک استفاده میکنه و در سی شارپ نوشته شده با یک برنامه که از تابع ها استفاده میکنه و در پاسکال و یا سی نوشته شده چی هست؟
من استفاده از استاتیک را به شئیگرائی ربط نمیدم، (سوء) استفاده زیادیش را به به شئی‌گرایی نبودن ربط میدم، همانطور که گفتم، فرقی بین برنامه‌ای که با سی سارپ نوشته شده و فقط از استاتیک متد استفاده میکنه با برنامه‌ای که با پاسکال و یا سی نوشته شده نداره.

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

http://en.wikipedia.org/wiki/Object-oriented_programming
Object-oriented programming (OOP) is a programming paradigm (http://en.wikipedia.org/wiki/Programming_paradigm) that uses "objects" to design applications and computer programs. It utilizes several techniques from previously established paradigms, including inheritance, modularity, polymorphism, and encapsulation.
Object-oriented programming may be seen as a collection of cooperating objects, as opposed to a traditional view in which a program may be seen as a collection of functions (http://en.wikipedia.org/wiki/Subroutine), or simply as a list of instructions (http://en.wikipedia.org/wiki/Instructions) to the computer. In OOP, each object is capable of receiving messages (http://en.wikipedia.org/wiki/Message_%28computer_science%29), processing data, and sending messages to other objects. Each object can be viewed as an independent little machine with a distinct role or responsibility.[2] (http://en.wikipedia.org/wiki/Object-oriented_programming#_note-0)

https://www.fawcette.com/javapro/2004_09/magazine/columns/proshop/
static methods preclude the ability for a program to customize behavior or implement generic algorithms using polymorphism. It can be tempting to lock up stateless algorithms into static methods instead of creating interfaces and class implementations. If you resist the temptation, you can make a class library more flexible and make the job of an application developer easier.

http://www.cs.ucsb.edu/~mikec/11ja/lab08.html
13. An overuse of static methods is often a sign of poor object-oriented design. Explain how you can compute the circumference and area of circles in a more object-oriented fashion.



اتفاقا یکی از دلایل مهمش صرفه جویی در حافظه است...
زمانی که پروسه ای اجرا میشه، حافظه ای که برای اون پروسه در نظر گرفته میشه شامل 3 قسمت هست:
1) Stack
Heap (2
Static (3

قسمت Static شامل اعضای static برنامه میشه.
اما اعضای static چی هستند؟
اعضای static، متدها و متغیرهایی هستند که برای استفاده از اونها نیازی به ایجاد یک نمونه ی جدید از کلاس نیست.
تعریف فوق، واضح و روشن هست.

قسمت Static در حافظه وجود داره. در حقیقت به عنوان یک قسمت رزرو شده از پیش تعیین شده.
اگر قرار باشه شیء ای جدید از یک کلاس ایجاد کنی، نیاز به اختصاص حافظه ای جدا در Heap برای اون شی است. (برنامه های دات نت در قسمتی از حافظه ی Heap با نام HFH یا (High Frequency Heap) قرار دارند.)

پس نقش حافظه در اینجا کاملا مشخص هست!

اگر ممکن است لطفا یک مثال بدید که وقتی اجراش میکنم نشان بده ، مثالا یک متد را ۱۰۰۰۰۰۰۰
در حالت استاتیک کال کنه و همان مقدار در حالت غیره استاتیک ، میشه مقایسه کرد کرد که چطوری حافظه‌موجود کاهش پیدا میکنند.



به عنوان یک اصل ثابت در #C، متدها و اعضایی که به چشم یک Utility به اونها نگاه میشه باید به شکل Static تعریف بشن.

موفق باشید.:لبخندساده:

به تمرین ۱۳ این یک نگاه بندازید:
http://www.cs.ucsb.edu/~mikec/11ja/lab08.html
13. An overuse of static methods is often a sign of poor object-oriented design. Explain how you can compute the circumference and area of circles in a more object-oriented fashion.

معمولا حساب کردن محیط و مساحت دایره را به عنوان یک utility method میشه تصور کرد. پس چرا استفاده از استاتیک متد را غیره شیئگرایی اِعلام میکنه؟

http://www.theagiledeveloper.com/articles/2005/02/18/the-evil-static-member
Now I do recognize that there is some value in static/shared class members, I use them myself when appropriate. But the reason I do not like prolific use of static members is because there is nothing resilient or adaptable about them. You can not override static members, they can not be declared in Interfaces, any client of a shared method is tightly coupled to that implementation, and the list goes on and on.

مخلصیم :لبخندساده:

Behrouz_Rad
جمعه 06 بهمن 1385, 21:41 عصر
دوست من!
تمامی مطالبی که ارائه کردی، به قول خودت، "زیاده روی" در استفاده از متدهای استاتیک رو نامناسب دونستند. مسلمه که زیاده روی در هر چیزی بده!
اما منظور تمامی گفته ها از "زیاده روی" چیه؟
یکی از معایبی که بر شمرده شده اینه که متدهای static قابلیت override شدن ندارند و در نتیجه نمی تونن در بحث "چند ریختی" شرکت کنند.
همچنین متدهای static تنها به اعضای static دسترسی دارند.
این به هوش و ذکاوت تو بر میگرده که بدونی چه زمان متدهای تو نیاز به override شدن دارند. در چه مکانی استفاده میشن و ...
پس منظور از جلوگیری از "زیاده روی"، شناخت موقعیت صحیح اشیای کلاس و ارتباط بین اونهاست.
شی گرایی یعنی هنر طراحی اشیا و ایجاد ارتباط صحیح بین اونها.
اگر متدی مینویسی که محیط و مساحت دایره رو حساب می کنه و فکر می کنی نیاز به Override شدن این متد هست، اون رو نباید Static تعریف کنی!
اصولا کلاس ها و اشیای دات نت گواه خوبی هستند برای اینکه ببینی چه زمانی از اعضای "static" در اونها استفاده شده...


اگر ممکن است لطفا یک مثال بدید که وقتی اجراش میکنم نشان بده ، مثالا یک متد را ۱۰۰۰۰۰۰۰
در حالت استاتیک کال کنه و همان مقدار در حالت غیره استاتیک ، میشه مقایسه کرد کرد که چطوری حافظه‌موجود کاهش پیدا میکنند.

نیاز به مثال نیست!
تفاسیری که در پست قبلی در این مورد گفتم با هر عقل سلیمی سازگار هستند.


معمولا حساب کردن محیط و مساحت دایره را به عنوان یک utility method میشه تصور کرد. پس چرا استفاده از استاتیک متد را غیره شیئگرایی اِعلام میکنه؟

اون عبارت یه هیچ وجه، استفاده از متد static رو غیر شی گرایانه توصیف نکرده!
ترجمه ی اشتباهی داشتی....


بنابراین اگر یک برنامه بنویسیمم که همه متدها استاتیک باشند با زهم یک برنامه شئی‌گرائی حساب میشه؟

برای اینکه به این سوالت پاسخ بدم، تو رو به دیدن "Microsoft Application Blocks for .NET" دعوت می کنم.
معنای واقعی استفاده از اعضای "static" رو در این برنامه شاهد خواهی بود.

موفق باشی.

aidinwashere
جمعه 06 بهمن 1385, 23:08 عصر
اصلا مگه میشه از Page ارث نبرد؟!

اَرژنگ
شنبه 07 بهمن 1385, 05:21 صبح
دوست من!
تمامی مطالبی که ارائه کردی، به قول خودت، "زیاده روی" در استفاده از متدهای استاتیک رو نامناسب دونستند. مسلمه که زیاده روی در هر چیزی بده!
اما منظور تمامی گفته ها از "زیاده روی" چیه؟
یکی از معایبی که بر شمرده شده اینه که متدهای static قابلیت override شدن ندارند و در نتیجه نمی تونن در بحث "چند ریختی" شرکت کنند.
همچنین متدهای static تنها به اعضای static دسترسی دارند.
این به هوش و ذکاوت تو بر میگرده که بدونی چه زمان متدهای تو نیاز به override شدن دارند. در چه مکانی استفاده میشن و ...
پس منظور از جلوگیری از "زیاده روی"، شناخت موقعیت صحیح اشیای کلاس و ارتباط بین اونهاست.
شی گرایی یعنی هنر طراحی اشیا و ایجاد ارتباط صحیح بین اونها.
اگر متدی مینویسی که محیط و مساحت دایره رو حساب می کنه و فکر می کنی نیاز به Override شدن این متد هست، اون رو نباید Static تعریف کنی!
اصولا کلاس ها و اشیای دات نت گواه خوبی هستند برای اینکه ببینی چه زمانی از اعضای "static" در اونها استفاده شده...


من هم از اولش سعی کردم که همین رو بگم :لبخندساده:


نیاز به مثال نیست!
تفاسیری که در پست قبلی در این مورد گفتم با هر عقل سلیمی سازگار هستند.


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




اون عبارت یه هیچ وجه، استفاده از متد static رو غیر شی گرایانه توصیف نکرده!
ترجمه ی اشتباهی داشتی....


An overuse of static methods is often a sign of poor object-oriented design
"اگر استفاده زیاد از استاتیک نشان ضعف در تر۱حی شئی‌گرائی میباشد."
ه اگر A موجودیت B را تضعیف میکنه ،منطق میگر که ۲ حالت وجود داره.
۱)A بر ضد B عمل میکنه
۲)A بر وفق B عمل میکنه.
۲ به عقل جور درنمیاد، پس بنابراین ۱ باید درست باشه.




برای اینکه به این سوالت پاسخ بدم، تو رو به دیدن "Microsoft Application Blocks for .NET" دعوت می کنم.
معنای واقعی استفاده از اعضای "static" رو در این برنامه شاهد خواهی بود.

موفق باشی.
خیلی جالب بود، متشکر ، در کل این توپیک فقط از پستهایه شما بهره بردم، امیدوارم که بقیه هم این را چک کنند.

مخلصیم.:لبخندساده:

اَرژنگ
شنبه 07 بهمن 1385, 05:34 صبح
اصلا مگه میشه از Page ارث نبرد؟!
شدنش که میشه، ولی همینطوری ارث بردن (و یا نبردن) هم همیشه صحیح نیست. بستگی به این دارد که قصدتان چی هست.
اگر متد به عملیاتی که پیج انجام میده فایده داره و به پیج ربط داره ارث بردن به نظر درست میاد.
ولی اگر مثلا یک یوتیلیتی برایه تبدیل مثلا شمسی به میلادی است، به پیج ربطی نداره و بهتر این است که در کلاس دیگر تعریف بشه.

احتمالا شما در فکرتان حالت بخصوصی را در نظر دارید، اگر یکمی بیشتر بیان کنید شاید اصلا جواب یک چیزه دیگری باشه( بدون دانستن سوال جواب دادن ممکن نیست:لبخندساده:)

Navid7h
شنبه 07 بهمن 1385, 13:15 عصر
آژرنگ جان با این که کلی به ما توپیدی ! برای استفاده از اسم تو NameSpace ولی خوشم مییاد با شور و حال جواب میدی !

در ضمن کلی چیز هم ازت یاد گرفتیم ;)

همین طور از آقای راد .

مرسی از همه.

اَرژنگ
شنبه 07 بهمن 1385, 18:20 عصر
آژرنگ جان با این که کلی به ما توپیدی ! برای استفاده از اسم تو NameSpace ولی خوشم مییاد با شور و حال جواب میدی !

در ضمن کلی چیز هم ازت یاد گرفتیم ;)

همین طور از آقای راد .

مرسی از همه.
نویدجان، راستش را بخواهید من هدف این نبود که بتوپم، ولی ببینم که یک سری عقیده که تو کلّم جمع شده اصلا آب ورمیداره یا نه (یعنی اینکه درست هست یا نه)؟. برایه یادگرفتن تخصصی باید عقیده را گفت و دنباله دلایلی که ردش میکنه و یا بهش صحت میده گشت. من بیشترین مقداری که یاد گرفتم وقتی بود که ایرادهایه کارم را برام ردیفی لیست میکردند (هنوزهم لیست میکنند، ولی دلایل عوض شده).
در قسمته الگریتم، بر رویه یک سوال ساده کلی پافشاری کردم. چونکه اصلا به نظرم درست نیامد، ولی بعد از چند بار خواندن متوجه یک نقته کوچیک شدم که بهم نشان داد اصلا سوال را اشتباهی میدیدم (سالها متوجه نشده بودم).
یک دلیل دیگه برایه اشکال گرفتنم این است ک باور دارم کسانی که ازشان اشکال میگیرم متخصصین بهتر از خودم هستند و انتظار دارم که اشکالات من را بهم بگویند. در گذشته از هرکی اشکال گرفتم کارش از من خیلی بهتر شده:لبخند:

sre.net
یک شنبه 08 بهمن 1385, 19:10 عصر
اگر بخوایم دی ال ال درست کنم باید چه کرد؟

اَرژنگ
یک شنبه 08 بهمن 1385, 19:15 عصر
اگر بخوایم دی ال ال درست کنم باید چه کرد؟
در دات‌نت دی‌ال‌ال درست نمیکنند، اسمبلی درست میکنند،
در فایل ، نیو، کلاس لیبراری را انتخواب کنید، کلاستان را پابلیک تعریف کنید.
در پروژهَ ی که میخواهید از اسمبلی استفاده کنید، به رفرانسهاش اضافه کنید.