وبلاگ فرهاد مرتضی پور

Farhad Mortezapour's Blog

وبلاگ فرهاد مرتضی پور

Farhad Mortezapour's Blog

مثلث خیام

می خواهیم برنامه ای به زبان C بنویسیم که اعداد زیر را به کمک یک ماتریس تا 10 سطر ساخته و چاپ کند :

1

1        1

1        2        1

1        3        3        1

1        4        6        4        1

1          5        ..        ..        ..        ..

 این مثلث اعداد را مثلث خیام نیوتن میگویند. اگر ماتریسی را به این شکل در نظر بگیریم :

1        ..        ..        ..        ..        ..

1        1        ..        ..        ..        ..

1        2        1        ..        ..        ..

1        3        3        1        ..        ..

1        4        6        4        1        ..

..        ..        ..        ..        ..        ..

میتوان گفت هر درایۀ ماتریس پایین مثلثی از جمع دو درایۀ بالا و بالا سمت چپ خود درست شده است یعنی :

a i,j = a i-1, j + a i-1, j-1

 

void main()
{
    int a[10][10], i, j;
    for(i=0;i<10;i++)   //
 ابتدا ستون اول و قطر اصلی را برابر یک قرار میدهیم
    {
        a[i][0]= 1;
        a[i][i] = 1;
    }

    for(i=2;i<10;i++)   
//باقی خانه ها را به شکل یاد شده محاسبه میکنیم
        for(j=1; j            a[i][j] = a[i][j-1] + a[i-1][j-1];

    for(i=0;i<10;i++)   
//چاپ ماتریس پایین مثلثی
    {
        for(j=0; j<9-i; j++)  
// چاپ فضای خالی قبل از اعداد برای ساختن شکل مورد نظر
            cout<< "        ";
        for(j=0; j<=i; j++)  
// چاپ درایه های ماتریس
            cout << a[i][j];
    }
}

برنامه تاریخ شمسی به زبان C

در این یادداشت الگوریتم تبدیل تاریخ میلادی به تاریخ شمسی را معرفی و به زبان C پیاده سازی کرده بودم که می توانید سورس آن را بصورت آماده از اینجا دانلود کنید

ZOOL نسخه ای از یونیکس بر روی فلاپی

زول سیستم عامل کوچکی از خانواده یونیکس است که بر روی یک فلاپی قرار میگیرد. زول بر پایه کرنل لینوکس و ابزارهای GNU و Slackware بنا شده است.
بیشترین نگرانی در مورد سیستم عاملهای کوچک نظیر زول حجم آنها است که نباید از مرز 1440 کیلوبایت عبور کند در عین اینکه امکانات لازم و کافی را هم برای مدیران و کاربران شبکه مهیا کند!
زول میتواند ابزار مناسبی باشد برای مدیران و سرپرستان سیستمهای یونیکس تا در مواقع اضطراری از آن برای رفع مشکلات بوجود آمده کمک بگیرند.
فایلها و کرنل زول قبل از فشرده شدن جمعاً چهار مگابایت داشتند که با تبدیل به Batchfile و سپس به Binary حجم لازم به 1436 کیلوبایت رسید. زول 3 بر اساس کرنل 2.4.18 ساخته شده است و نسبت به ورژن های قبلی دستورات بیشتر و محیط گرافیکی بهتری ارائه میدهد. از Pico و Vi به عنوان ویرایشگر استفاده شده است و همچنین از دستورات شبکه ای Route، Telnet، Ifconfig و Ping برخوردار شده است که برای یک کار شبکه ای ساده کافی است.
یکی از مزایای زول 2 پشتیبانی انواع  فایل سیستم سیستم عامل های مختلف بوده که Recover کردن اکثر سیستم عاملهای معروف را ممکن میکند.
زول 3 از فایل سیستم های Ext2-3,Raiserfs,Ntfs,Fat16,Fat32,Msdos,Vfat,Minix پشتیبانی میکند و  همچنین چند برنامه مخصوص کار کردن با فایل سیستم های معروف مثل tune2fs بر روی زول قابل استفاده هستند.
اگر کارت گرافیکی شما سازگار با X باشد میتوانید از کنسول 16 بیتی در زول استفاده کنید. زول همچنین از شل Ash استفاده میکند و همینطور از Virtual Console 6.

 

General Commands

addpart

ar

ash

basename

blockdev

cal

cat

cfdisk

chfn

chgrp

chmod

chown

chroot

chsh

clear

cmp

col

colcrt

colrn

column

cp

cpio

cut

cytune

date

dd

ddate

debugraiserfs

delpart

df

dirname

dmesg

dos2unix

ln

loadacm

loadfont

loadkmap

logger

losetup

ls

lsmod

mkdir

mkfs

mkfs

bfs

mkfs

minix

mknod

mkreiserfs

mkswap

more

mount

mt

mv

newgrp

nslookup

partx

pidof

ping

pivot_root

poweroff

printf

ps

raw

rdev

readprofile

reboot

reisefstune

renice

rescuept

reset

reset_raiserfs

rev

rm

rmdir

rmmod

route

rpmunpack

script

sed

sedfdprm

setsid

setterm

sfdisk

sleep

sort

swapoff

swapon

sync

tail

tar

tee

telnet

touch

tr

tty

ul

umount

uname

uniq

unix2dos

unpack

unzip

vigr

vipw

wall

wc

wget

which

write

xargs

xxd

free

freeramdisk

kill

killall

du

rdev

 Zcat

 

 

 دریافت ZOOL3

ویژوال بیسیک : تبدیل عدد به معادل حرفی آن

در این یادداشت تابع تبدیل عدد به معادل حروفی آنرا ارائه می کنم. عمدتا در سیستم های مالی و حسابداری نیاز است معادل حروفی اعداد هم نمایش داده شده یا چاپ شوند که توابع زیر این نیاز را پاسخ می دهد. مثلا برای چاپ یک چک روی خود برگه چک ، علاوه بر نیاز به چاپ مبلغ عددی چک لازمست تا مبلغ حروفی چک هم روی برگه چاپ شود.
نحوه استفاده از تابع :
تابع Adad که در زیر ارائه شده است یک عدد را بعنوان ورودی گرفته و معادل حروفی آن عدد در زبان فارسی را بعنوان خروجی تولید می کند. مثلا (Adad(1373 مقدار "یک هزار و سیصد و هفتاد و سه" را بعنوان خروجی تولید می کند.

Function Adad(ByVal Number As Double) As String

If Number = 0 Then

Adad = "صفر"

End If

Dim Flag As Boolean

Dim S As String

Dim I, L As Byte

Dim K(1 To 5) As Double

 

S = Trim(Str(Number))

L = Len(S)

If L > 15 Then

Adad = "بسیار بزرگ"

Exit Function

End If

For I = 1 To 15 - L

S = "0" & S

Next I

For I = 1 To Int((L / 3) + 0.99)

K(5 - I + 1) = Val(Mid(S, 3 * (5 - I) + 1, 3))

Next I

Flag = False

S = ""

For I = 1 To 5

If K(I) <> 0 Then

Select Case I

Case 1

S = S & Three(K(I)) & " تریلیون"

Flag = True

Case 2

S = S & IIf(Flag = True, " و ", "") & Three(K(I)) & " میلیارد"

Flag = True

Case 3

S = S & IIf(Flag = True, " و ", "") & Three(K(I)) & " میلیون"

Flag = True

Case 4

S = S & IIf(Flag = True, " و ", "") & Three(K(I)) & " هزار"

Flag = True

Case 5

S = S & IIf(Flag = True, " و ", "") & Three(K(I))

End Select

End If

Next I

Adad = S

End Function

 

Function Three(ByVal Number As Integer) As String

Dim S As String

Dim I, L As Long

Dim h(1 To 3) As Byte

Dim Flag As Boolean

L = Len(Trim(Str(Number)))

If Number = 0 Then

Three = ""

Exit Function

End If

If Number = 100 Then

Three = "یکصد"

Exit Function

End If

 

If L = 2 Then h(1) = 0

If L = 1 Then

h(1) = 0

h(2) = 0

End If

 

For I = 1 To L

h(3 - I + 1) = Mid(Trim(Str(Number)), L - I + 1, 1)

Next I

 

Select Case h(1)

Case 1

S = "یکصد"

Case 2

S = "دویست"

Case 3

S = "سیصد"

Case 4

S = "چهارصد"

Case 5

S = "پانصد"

Case 6

S = "ششصد"

Case 7

S = "هفتصد"

Case 8

S = "هشتصد"

Case 9

S = "نهصد"

End Select

 

Select Case h(2)

Case 1

Select Case h(3)

Case 0

S = S & " و " & "ده"

Case 1

S = S & " و " & "یازده"

Case 2

S = S & " و " & "دوازده"

Case 3

S = S & " و " & "سیزده"

Case 4

S = S & " و " & "چهارده"

Case 5

S = S & " و " & "پانزده"

Case 6

S = S & " و " & "شانزده"

Case 7

S = S & " و " & "هفده"

Case 8

S = S & " و " & "هجده"

Case 9

S = S & " و " & "نوزده"

End Select

 

Case 2

S = S & " و " & "بیست"

Case 3

S = S & " و " & "سی"

Case 4

S = S & " و " & "چهل"

Case 5

S = S & " و " & "پنجاه"

Case 6

S = S & " و " & "شصت"

Case 7

S = S & " و " & "هفتاد"

Case 8

S = S & " و " & "هشتاد"

Case 9

S = S & " و " & "نود"

End Select

 

If h(2) <> 1 Then

Select Case h(3)

Case 1

S = S & " و " & "یک"

Case 2

S = S & " و " & "دو"

Case 3

S = S & " و " & "سه"

Case 4

S = S & " و " & "چهار"

Case 5

S = S & " و " & "پنج"

Case 6

S = S & " و " & "شش"

Case 7

S = S & " و " & "هفت"

Case 8

S = S & " و " & "هشت"

Case 9

S = S & " و " & "نه"

End Select

End If

S = IIf(L < 3, Right(S, Len(S) - 3), S)

Three = S

End Function

نت آهنگ خواب های طلایی (Golden Dreams)

نت آهنگ خواب های طلایی (Golden Dreams) به همراه فایل mid آن را از اینجا دانلود کنید

فرمت : Zip

حجم : ۲۱ کیلوبایت

نمایش زمان در دسترس بودن ویندوز

شما یک مدیر سیستم هستید و نگهداری از سرور یکی از مهمترین وظایف شماست. آیا برای شما جالب نخواهد بود که بدانید از زمان راه اندازی سرور تا این لحظه زمانی که سرور در دسترسی بوده (Uptime) به روز/ساعت/دقیقه/ثانیه مجموعاً چقدر است و همینطور زمانی که در دسترس نبوده (Downtime) و نسبت  این دو، که تشکیل دهنده درصد در دسترس بودن را نمایش میدهد. جالب است، نه؟! شاید جالب تر هم باشد اگر بدانید سرور در چه تاریخ ها و زمانهایی دوباره راه اندازی شده (Boot) و فاصله زمانی بین هر Boot  چقدر بوده و باز شاید جالب باشد که بدانید چه تاریخ و زمانهایی دستور   Shutdown  صادر شده! و قبل از هر  Shutdown سرور چه زمانی  Up بوده؟ و اینکه تعداد  BlueScreenها تا این لحظه چه مقدار است !؟
همه آنچه گفته شد با Uptime Tool و دستورuptime.exe  در ویندوز NT،2000  وXP  امکانپذیر است و فقط باید ابتدا آن را از سایت مایکروسافت که در بالا به آن لینک دادم دریافت کنید. (اگر آدرس تغییر کرده بود در سایت مایکروسافت  uptime.exe را جستجو کنید!)
روش کار با این فرمان بسیار ساده است و اگر بعد از استخراج فایل  uptime.exe آن را در  systemroot که در ویندوز 2000 بنام WINNT  و در ویندوز XP  بنام  Windows ایجاد میگردد قرار دهید از هر نقطه ازCommand Prompt  میتوانید به راحتی با اجرای دستور بدون پارامتر خاصی یک گزارش کلی نظیر آنچه در زیر نمایش داده شده از آخرین بار که سیستم بوت شده ببینید و با دستور uptime /s میتوانیم اطلاعات ریزتری نیز نمایش دهیم

و اما یک نکته مهم که باید به آن توجه داشته باشید استفاده از پارامتر Hearbeat است. برای اینکه سرور قادر باشد اطلاعات مربوط به مدت Shutdown بودن را زمانیکه به درستی نتوانسته پروسه Shutdown را طی کند ذخیره سازد باید با استفاده از uptime /heartbeat آن را فعال کنیم (اگر از این دستور بر روی سرور استفاده میکنید حتماً Heartbeat را فعال کنید). باید توجه داشت که با فعال کردن این گزینه uptime هر  پنج دقیقه اطلاعاتی را بر روی Registry ثبت میکند لذا برنامه پیشنهاد میکند از فعال کردن این گزینه بر روی سیستم عاملهایی که بر روی  Notebook نصب شده خودداری کنید تا اختلالی در  Power Management ایجاد نگردد.

برای آگاهی از پارامترهای مختلف این دستور از ?/ Uptime استفاده کنید.

منبع IT Buzzer

آرایه ها در دلفی

دلفی به ما امکان می دهد آرایه‌هایی از هر نوع متغییری را ایجاد کنیم. برای تعریف آرایه به صورت زیر عمل میکنیم

var

   array[indexType1, ..., indexTypen] of baseType;

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

نکته: شما می توانید به جای استفاده از کروشه [] از ترکیب پرانتز نقطه استفاده کنید:

d(.i.):= 3 + i; // Equivalent d[i]:= 3 + i;

نکته: وقتی که شما یک آرایه را تعریف می کنید احتیاجی ندارید که به آن مقدار کمترین یا بیشترین بدهید:

var

   A : array [Boolean] of integer;

begin

   A[True] := 50;

   A[False] := 100;

end;

نکته: توابع Low و High کران‌های پایین و بالای یک متغییر آرایه‌ای یا نوعی یا ترتیبی را بر میگردانند:

for I := 0 to High(X) do  S := S + X[I];

 

آرایه‌های ثابت

آرایه های ثابت می توانند توسط ساختار ثابت نوع دلفی تعریف شود. نوع ثابت که همیشه با عبارت Const تعریف می شود، نه تنها مانع تغییر مقدار پارامتر می شود، بلکه کدهای بهینه بیشتری برای رشته‌ها و رکوردهای رد شده به توابع تولید می کند. ما هنگامی از این نوع استفاده می کنیم که نخواهیم مقدار رد شده به یک تابع تغییر کند.

type

   TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday(;

const

   DayNames : array [TDay] of String[9] = ('Sunday', 'Monday', 'Tuesday' ,'Wednesday', 'Thursday', 'Friday', 'Saturday');

var

   Today : TDay;

begin

   Today := TDay(DayOfWeek(Date));

   ShowMessage('Today is ' + DayNames[Today]);

end;

 

آرایه‌های دینامیکی

آرایه‌های دینامیکی، آرایه‌های تحلیلی پویایی هستند که ابعاد آنها موقع کامپایل شدن شناخته شده نیست. برای اعلان آنها کافی است یک آرایه بدون بعد تعریف کنید:

var MyFlexibleArray: array of Real;

قبل از به کار گیری آرایه‌های دینامیکی، ابتدا باید از رویه SetLength برای تخصیص حافظه آرایه استفاده کرد:

SetLength (MyFlexibleArray, 2; (

نکته: آرایه‌های دینامیکی همیشه مبتنی بر صفر می باشند.

نکته: شما می‌توانید آرایه‌های دینامیکی را قبل از رسیدن به ترک قلمرو از حافظه خارج کنید:

MyFlexibleArray := nil;

نکته: مقدار حافظه‌ای که در اختیار آرایه قرار میگیرد، به طول آرایه ونوع عناصر آن بستگی دارد. به عنوان مثال اگر آرایه‌ای از نوع صحیح به طول 10 داشته باشیم 4*10 بایت حافظه به آن اختصاص می‌یابد.

فشرده‌سازی آرایه‌ها

در دلفی شما هنگامی که ساختار خود را تعیین کردید می‌توانید با استفاده از کلمه کلیدی packed اطلاعات ذخیره شده خود را متراکم کنید:

type TNumbers = packed array[1..100] of Real;

نکته: استفاده از packed سرعت دسترسی به اطلاعات را کند میکند. در مورد آرایه‌ای از کاراکترها این مورد سازگارتر می‌باشد.

آرایه‌های چند بعدی دینامیکی

برای تعریف آرایه‌های چند بعدی دینامیکی، تنها کافی است ...array of را در ساختار خود تکرار کنید. به طور مثال:

type

   TMessageGrid = array of array of string;

var

   Msgs: TMessageGrid;

این تعریف یک آرایه دو بعدی از رشته‌ها می باشد. سپس باید به آرایه خود فضا نسبت داد:

SetLength(Msgs, I, J);

شما می‌توانید آرایه‌های چند بعدی دینامیکی خود را به صورت غیر مستطیلی (Not Rectangular) ایجاد کنید. ابتدا رویه SetLength را صدا زده و پارامتر بعد اول را بدهید:

var

   Ints: array of array of Integer;

SetLength(Ints, 10);

ما 10 سطر به آرایه خود اختصاص دادیم. از این پس، شما می توانید ستونهای خود را در هر زمان (با اندازه‌های مختلف) تخصیص دهید:

SetLength(Ints[2], 5);

مواج کردن یک تصویر در فتوشاپ

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

تصویر اصلی (پرچم)

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

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

(Layer> Layer Style> Create Layers) و سپس لایه‌های حاصل را ترکیب کنید.

۲) بخش‌های اطراف پرچم را خالی بگذارید و به یاد داشته باشید که در هنگام کار با افکت‌های جابه‌جا شونده بخش‌هائی از پرچم که گوشه‌های بوم نقاشی شده دارد کار را زشت جلوه می‌دهد. بنابراین اگر اندازه بوم نقاشی را در برابر پرچم بگیرید و پرچم را در مرکز آن قرار دهید، بهتر است (برای این کار می ‌توانید از یک زمینه با رنگ سفید استفاده کنید که لایه‌ها را از هم جدا کرده و تشخیصشان را برای شما راحت‌تر می‌کند).

تصویر جابه‌جا شونده

و حال تصویری که برای جابه‌جائی نیاز دارید را خواهید ساخت. سعی کنید آن را در حد ممکن ساده نگه دارید. برای شروع سندی جدید با اندازه دو برابر پرچم بسازید. برای بیرون کشیدن افکت مورد نظر به فضای بسیاری نیاز دارید. اگر تصویر جابه‌جاشونده خیلی کوچک باشد، نتیجه کارتان ضعیف خواهد بود. بنابراین آن را بزرگ و زیبا بسازید. پرچم شما می‌تواند ۲۴۹*۴۱۵ پیکسل باشد. برای چنین اندازه‌ای می‌توانید تصویر جابه‌جا شونده را ۸۳۰٭۸۳۰ در نظر بگیرید. حال به‌عنوان نخستین تلاش در جابه‌جائی از نقشه شیب‌دار (متحرک مدرج) استفاده کنید. برای ساخت قنشه شیب‌دار (متحرک مدرج) در تصویر جابه‌جا شونده Layer> New Fill Layer> Gradient Fill را برگزینید تا کادر گفتگوی موردنظر نمایان شود.

برای ساخت یک شیب سفارشی، روی تصویر، شیب انتخابی خود را کلیک کنید و نه روی منوی بازشونده! چرا که این‌کار کادر گفتگوی Gradient Editor را فرا خواهد خواند.

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

شما برای ایجاد هرگونه تغییری آزاد هستید تا به نتیجه دلخواه تان برسید. سپس تصویر شیب‌دارتان را ذخیره کنید. یکی از مشکلاتی که در این بخش با آن روبه‌رو می‌شوید این است که هرگاه افکت جابه‌جاشونده در پرچمتان موردنیاز باشد. نسخه از پیش ذخیره شده، نمایان می‌شود. اگر در شیب آنها تغییری دهید و بخواهید جابه‌جائی تازه‌ای در آن پدید آورید، تغییرات در جابه‌جائی دیده نمی‌شوند، مگر اینکه تغییرات در شیب، حفظ و نگهداری شوند.

ترکیب شیب‌ها

پیش از کامل کردن جابه‌جائی یا موج پرچم باید ترفندهائی را به آن بیفزائید که این به معنای افزودن سایه و های‌لایت به موج‌ها است. البته در کنار افکت بازتابی آن در تصویر جابه‌جاشونده خود، همه چیز را انتخاب کنید. سپس Shift-Command-C (مکینتاش) یا Shift-Control-C (در ویندوز) را تایپ کنید تا پیکسل‌های تصویر جابه‌جاشونده را کپی کند (در اینجا روش‌های معمولی کپی کردن کارساز نیست و شما باید کلید Shift را پائین نگه دارید). هم‌اکنون نزد تصویر پرچم خود بروید و پیکسل‌ها را جایگزین کنید (Command-V) و سپس شیب را در لایه‌ای جدید که درست بالای لایه پرچم است، جایگزین کنید.

پس از آن با لایه شیبی که انتخاب شده است Layer>Create Clipping Mask (یا چیزی شبیه آن، بسته به نوع فتوشاپی که انتخاب کرده‌اید) را برگزینید. این اتفاق می‌افتد. اکنون به پالت Layer رفته و لایه شیبی Blend Mode را به Soft Light تبدیل کنید. حال می‌توانید کنتراست/ روشنائی لایه‌های شیب را برای تأثیر بیشتر روی های‌لایت‌ها و سایه‌هائی که ساخته‌اید، کم یا زیاد کنید.

کج کردن پرچم

زمانی‌ که این افکت را ساختید، اگر می‌خواهید پرچم شبیه پرچمی شود که از مکانی آویزان است، باید کمی به آن زاویه دهید.

به این منظور در پالت Layer، لایه پرچم را انتخاب کنید، سپس Edit>Free Transform را برگزینید. برای این‌کار انحراف افقی را روی ۲۵ تنظیم کنید و پرچم را به اندازه بیست و پنج درجه بچرخانید تا با آن هماهنگ شود. (شما می‌توانید این تنظیمات را روی نوار ابزار Tool Option انجام دهید) اکنون آماده هستیم تا جابه‌جائی را انجام دهیم.

افکت نهائی جابه‌جائی رسید. برای به‌کار بردن این افکت Filter>Distort>Displace را برگزینید تا کادرگفتگوی فیلتری باز شود. افراد مبتدی بهتر است از ”Tile“ استفاده کنند تا "Scale".

پس از Ok کردن تغییرات، کادر گفتگوی تازه‌ای باز می‌شود که از شما انتخاب نقشه جابه‌جا شونده را می‌خواهد. تصویر شیب‌داری را که پیش از این ساخته بودید، انتخاب کنید و نتیجه کار را ببینید.

اکنون می‌توانید به تصویر شیب‌دار برگشته و سطوح شیب‌دار دیگری را روی آن آزمایش کنید تا نتیجه دلخواه خود را به‌دست آورید.

منبع : نشریه تخصصی هنر و رایانه

نت آهنگ LoveStory

سلام

افرادی هستند که مثل من علاقه زیادی به نواختن پیانو یا کیبرد دارند لذا قصد دارم هرچند وقت یکبار نت آهنگ های معرف رو برای دانلود تو وبلاگ بذارم

نت آهنگ Love Story برای نواختن با پیانو رو میتونید از اینجا دریافت کنید

فرمت : PDF

برنامه چند لایه

برنامه چند لایه چیست؟

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

  • Presentation Layer
  • Business Logic Layer 
  • Data Access Layer

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

در بیشتر موارد داده هایی که توسط کاربر وارد می شوند نیاز به اعتبارسنجی یا پردازش اضافی دارند. این مسوولیت لایه Business Logic است.

در نهایت داده های برنامه شما نیاز به ذخیره و بازیابی از طریق یک انبار داده دارند ( مثلا سیستم مدیریت دیتابیس های رابطه ای یا RDBMS و یا XML , .. ) این وظیفه توسط لایه دسترسی به داده انجام  می شود.

به طور خلاصه، فرآیند مورد نظر ما این گونه کار می کند:

- کاربر برای داده های برنامه درخواستی ارسال می کند.
- لایه
Data Access داده های مورد نظر را بازیابی می کند و از طریق لایه Business Logic آن ها را به لایه نمایش می فرستد.بعضی مواقع لایه دسترسی به داده ها، این داده ها را مستقیما به لایه نمایش ارسال می کند.
- لایه نمایش اطلاعاتی که باید نمایش داده شوند را از طریق لایه
Business Logic دریافت می کند.
- کاربر داده ها را تغییر می دهد و عمل مناسب در مورد آن ها را اجرا می کند ( مثل اضافه یا به روز کردن داده ها )
- لایه
Business Logic صحت داده های وارد شده توسط کاربر را بررسی می کند ( داده ها را اعتبار سنجی می کند)
- اگر داده ها معتبر باشند آن ها را برای به روز رسانی در بانک اطلاعاتی به دست لایه دسترسی به داده می سپارد.

مزیت های برنامه های چند لایه

- برنامه ها به چند بخش منطقی جدا از هم تقسیم می شوند و اتصال میان UI ( رابط کاربری ) ، پردازش ها و بانک اطلاعاتی کم می شود.
- تغییر در بانک اطلاعاتی یا روال های دسترسی به داده ها تاثیری در لایه نمایش یا برنامه کلاینت نخواهد گذاشت.
- برنامه کلاینت با عبارات
SQL آمیخته نخواهد شد.
- نام جداول و ستون ها به طور موثری از برنامه کلاینت حذف می شوند.
- برنامه کلاینت نمی فهمد که داده ها از کجا آمده اند ( چیزی که به آن
location transparency گفته می شود )
- تغییر یا گسترش برنامه بسیار ساده تر خواهد شد، بدون نیاز به تغییر یا کامپایل مجدد برنامه کلاینت.

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

انتخاب های لایه Presentation

دو انتخاب اصلی برای ساخت یک لایه نمایش در دات نت وجود دارد. آنها فرم های ویندوزی یا فرم های وبی ASP.NET هستند.

با استفاده از ویندوز فرم ها شما می توانید برنامه های دسکتاپ فرم محور ( form base ) معمول را بسازید. برنامه های ویندوز فرمی می توانند المان های رابط کاربری بسیار غنی به کاربر پیشنهاد کنند.آن ها کم و بیش شبیه به فرم های ویژوال بیسیک هستند.

جذاب ترین گزینه برای توسعه لایه نمایش استفاده از وب فرم های ASP.NET است. کنترل هایی مثل دیتاگرید، دیتالیست و تقویم ( Calendar ) یک رابط کاربری قدرتمند را با مقدار کمی کد فراهم  می کنند.

انتخاب هایی که در بالا برای ساخت یک لایه نمایش بررسی کردیم می توانند توسط زبان های مختلفی مثل سی شارپ  یا ویژوال بیسیک دات نت پیاده سازی شوند.

انتخاب های لایه Business Logic

لایه Business logic از چندین بخش که کارهایی نظیر اعتبار سنجی کار، گردش کار یا کارهای مشابه را انجام می دهند تشکیل شده است.

کامپوننت های دات نت این لایه را شکل می دهند. شما می توانید با interop از کامپوننت های COM استفاده کنید ولی این کار کارآیی را پایین خواهد آورد.

وب سرویس های ASP.NET هم می توانند به عنوان یک business logic  عمل کنند. اما به هر حال آن ها را نمی توان در همه شرایط به عنوان جایگزین کامپوننت ها به کار برد. وب سرویس ها تنها زمانی قابل استفاده خواهند بود که اعتبار سنجی در جایی بیرون از شبکه شما اتفاق افتاده باشد.

کامپوننت هایی که شما توسعه می دهید به ماندن روی ماشین های مشابه نیازی ندارند. با استفاده از .NET Remoting شما می توانید آن ها را روی چندین ماشین توزیع کنید.

انتخاب های لایه Data Access 

این لایه با دستکاری داده ها مثل اضافه ، حذف و به روز رسانی آن ها سر و کار دارد. داده هایی که به آن ها اشاره کردیم می توانند در RDBMS یا  XML قرار داشته باشند. شما باید لایه دسترسی به داده را چنان طراحی کنید که دیگر لایه ها نیازی به دانستن وضعیت انبار داده ها نداشته باشند.

ADO.NET فناوری دسترسی به داده تحت دات نت است. اگر چه ADO.NET از طریق کلاس های DataReader اجازه دسترسی به داده های در هنگام اتصال را می دهد ولی بیشترین تمرکز روی دسترسی به داده ها در زمان متصل نبودن است. دیتاست نقش کلیدی را در این مورد بازی می کند. در بعضی موارد شما می توانید ADO را هم برای دسترسی به داده ها استفاده کنید ولی استفاده از آن باید دلیل معتبری داشته باشد. از ADO استفاده نکنید فقط به خاطر اینکه RecordSet ها را دوست دارید !

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

همچنین وب سرویس ها هم می توانند لایه دسترسی به داده را شکل دهند. این مخصوصا زمانی درست است که دیتابیس شما فراهم کننده  ( provider )  داده ندارد. در این گونه موارد شما می توانید مقداری کد  برای اتصال به داده ها و پر کردن دیتاست ها و بازگرداندن نتایج درون دیتاست به درخواست کننده داده بنویسید.

علاوه بر ADO.NET شما می توانید از امکانات سیستم مدیریت دیتابیس خود مثل توابع و یا روال های ذخیره شده ( Stored Procedures ) استفاده کنید.

ارسال داده از یک لایه به لایه دیگر

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

 

منبع : Digital Life