
مقدمه :
كاربرد روز افزون بانك اطلاعاتي SQL مرا بر آن داشت تا مطالبي هر چند كوتاه جهت خوانندگان محترم سايت تهيه نماييم. قبلا از هر چيز لازم به ذكر است كه مطالب ذيل در حد آشنايي بوده و دوستان براي دستيابي به تكنيكهاي بيشتر مي بايست از كتابهاي مرجع و Book online خود SQL Server استفاده نمايند. در مطالب زير كه سلسله وار مباحث SQL Server را مرور خواهيم كرد , سعي شده تا ابتدا مطالب مقدماتي جهت آشنايي آورده شود و سپس اگر عمري باقي بود به مطالب پيشرفته آن بپردازيم. همچنين براي يادآوري خدمت دوستان ابتدا مرور سريعي بر چند دستور SQL كه كاربرد بيشتري دارند خواهيم پرداخت و سپس به SQL Server و مطالب آن خواهيم پرداخت . مطالب زير اكثرا از كتاب Microsoft SQL Server 7.0 Database Implementation Training انتخاب گرديده است . اين كتاب به همراه CDآموزش آن به عنوان يك مرجع براي امتحانات مايكروسافت استفاده ميشود.
جداول بكار رفته نيز همگي در SQL Server 7.0 در Database Northwind موجود هستند.
| دستور Select |
اين دستور كه دستوري مستقل نيست و حتما بايد با اجزايي بكار رود جهت ساخت پرس و جو بر روي بانك اطلاعاتي بكار ميرود و ركوردهايي كه با شرايط اين دستور همخوان باشد به عنوان نتيجه پرس و جو برميگرداند . چهار كلمه كليدي وجود دارند كه بخشهاي ارزشمند اين دستور را تشكيل ميدهند :
1-select
2-from
3-where
4-order by
شكل كلي دستور :
Select [*|distinct column1, column2,…]
From table[,table2,…]
Where شرط
Order by نام فيلد يا شماره فيلد
مثال :
Select * from customers
اين دستور تمام ركوردهاي جدول customers را برميگرداند. كه نتيجه 91 سطر از اطلاعات اين جدول خواهد بود
حال اگر شرط
Country ='uk'
اضافه كنيم ، فقط اطلاعات مشتريان انگليس جواب خواهند بود كه به 7 سطر تقليل مييابد.
select * from customers
where Country ='uk'
حال
select City,Country from customers
order by city
فقط ستونهاي نام شهر (city) و نام كشور (Country) را بر گردانده و بر اساس نام شهر مرتب ميكند. دستور بالا با دستور پايين هردو يك جواب را ميدهند :
select City,Country from customers
order by 1
كه 91 سطر بازگردانده خواهد شد . در نتيجه پرس و جو تعدادي سطر تكراري وجود دارد مانند شهر London كه اگر از كلمه Distinct در Select استفاده كنيم اين سطرهاي تكراري حذف خواهد شد .
select distinct City,Country from customers
order by 1
و جواب 69 سطر خواهد بود.
استفاده از توابع در Select
1- Count :
تعداد سطرهاي بازگردانده شده توسط select را ميشمارد.
Select Count(*) from Customers
where Country ='uk'
در اصل تعداد مشترياني را ميشمارد كه در كشور انگليس هستند. كه عدد 7 جواب است.
2- Sum :
مجموع يك فيلد عددي را برميگرداند.
Select sum(Quantity) from [Order Details]
مجموع فيلد Quantity را براي فيلدهايي كه شماره محصول آنها ( Productid) برابر 11 است را محاسبه ميكند
نكته 1 :
در دستور select ميتوان از اسم مستعار استفاده كرد ، يعني نام جديدي را براي يك ستون در نظر گرفت به عنوان مثال select قبل را به شكل زير بكار برد :
Select sum(Quantity) as Sum_QTY
from [Order Details]
where productid = 11
كه Sum_QTY يك اسم مستعار براي مجموع است. استفاده از كلمه كليديas اختياري است.
نكته 2 :
در دستور select هرگاه اسم فيلدي اسم خاص باشد و يا فاصله بين اسم باشد مثل Order Details كه فاصله بين اسم جدول است حتماُ از علامت براكت [] ميبايست استفاده كرد.
نكته 3 :
استفاده از group by :
هنگامي كه از توابع count و Sum به همراه يك فيلد ديگر در دستور select استفاده ميشود از group by استفاده ميكنيم .
به عنوان مثال دستور زير جمع مقادير فيلد Quantity را براي هر شماره محصول محاسبه ميكند .
Select productid, sum(Quantity) as sum_qty
from [Order Details]
group by productid
كه نتيجه مانند زير خواهد بود :
productid sum_qty ---------------------- 61 603 3 328 32 297 6 301 41 981 64 740 9 95 12 344
در صورتيكه دستور ordr by 1 بعد از group by استفاده كنيم نتيجه بر اساس كد محصول مرتب خواهد شد.
آموزش SQL SERVER
نكته 4 :
دستور where مي تواند خود شامل يك دستور select باشد :
select * from Products
where ProductID in
( select distinct ProductID from [order details] where Quantity >70)
order by ProductID
تنها نكته اي كه مي بايست توجه كرد اين است كه نام فيلدي كه در شرط آورده مي شود حتما در دستور select آورده شود, به عبارت ديگر select درون شرط تنها يك ستون را مي بايست برگرداند .
تمرين : با فرض اينكه دو جدول Products و order details داراي ستون (فيلد) يكسان ProductID هستند , يك دستور Select بنويسيد كه تمام فيلدهايي از Products را نشان دهد كه فيلد ProductID آن با ProductID جدول order details يكي باشد.؟
حل :
Select pr.*
From Products as pr , [order details] as od
Where pr. ProductID = od. ProductID
قابل به ذكر است كه بيش از 90% از كارهايي كه ما برروي جداول انجام مي دهيم با select و تركيبات آن انجام مي شود. لذا بدست آوردن تبحر در نوشتن select ها مي تواند شما را در تهيه برنامه ها ياري كند.
تدریس SQL SERVER
3-Min,max :
بيشترين و كمترين مقدار فيلد را در بانك اطلاعاتي بدست مي دهد.
Select min (Quantity)
from [Order Details]
4-Top n :
تعداد n سطر اول بانك اطلاعاتي را برمي گرداند.
Select top 5 *
from [Order Details]
5 سطر اول بانك را برمي گرداند.
نكته 3 : در حالت بالا اگر مقدار سطر 5 و 6 يكي باشد فقط سطر 5 جواب خواهد بود براي گريز از اين حالت از شكل زير در اين دستور استفاده ميكنيم :
Select top n with ties *
From table
5-Into
Select * from table1 into table2
اطلاعات table1 را به table2 كپي ميكند. البته table2 بايد از قبل وجود نداشته باشد.
اين دستور خود table2 را ميسازد.
دستور select قويترين و كاربردي ترين دستور در sql است كه خود ماهها نيازمند تمرين و آموزش است . براي اطلاعات بيشتر به books online خود Sql Server مراجع كنيد.
| دستور Delete |
براي حذف اطلاعات از يك بانك اطلاعاتي استفاده ميشود.
شكل كلي دستور :
Delete table1
Where شرط
مثال :
فرض كنيد جدول authors موجود باشد و فيلد كليد آن au_id باشد. براي حذف 10 سطر اول اين جدول از دستور زير استفاده مي كنيم :
DELETE authors
FROM
(SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id
| دستور insert |
براي اضافه كردن اطلاعات به يك جدول از اين دستور استفاده ميشود.
Insert into table1 (f1,f2,…)
Values (v1,v2,…)
كه f1,f2 نام فيلدها و v1,v2 مقادير آنها ميباشد.
البته ميتوانيد مقادير را نتيجه يك select قرار داد.
مثال :
Insert into table1
Select top 10
From table2
مقدار 10 سطر اول را از table2 را در table1 درج ميكند. البته بايد تعداد فيلدها يكي باشد. در غير اينصورت از values استفاده كنيد.
کسی منکر این نیست که تگ h1 از اهمیت زیادی در سئو سایت برخوردار هست و تمام فعالان حوزه بهینه سازی سایت وجود تگ h1 را ضروری می دانند و تگ h1 این امکان رو به موتور های جستجو می دهد که بهتر محتوای سایت شما رو درک کنند. اما شما حتما این قانون رو شنیدید که باید توی هر صفحه فقط یک تگ h1 وجود داشته باشه. خوب این حرف تا حدودی درست هست ولی چنین قانونی صد رد صد هستش. می خواهید بدونید چرا ؟ پس این مقاله رو با دقت بخونید.
سال های سال است که گفته می شود که باید تنها از یک تگ h1 استفاده نمود . این مورد بار ها و بار ها هم توسط کسانی که با بهینه سازی سایت آشنا هستند در انجمن ها و سایت ها به کاربران تازه کار توصیه می شود. شرایطی که این قانون رو بوجود آورده :

خوب اگر این دو تا اصل رو در نظر بگیریم چون تگ h1 عدد یک داره پس یک بار و تگ h2 چون دو هست باید دوبار ولی می دونید که این طوری نیست و ما توی هر صفحه بیشتر از دوبار ممکنه از h2 استفاده کنیم. یک بار دیگه بیاید که شماره اول این شرط رو بخونیم “از اونجایی که هر صفحه می تونه فقط یک عنوان داشته باشه پس باید از یک تگ h1 استفاده نمود.” به نظر شما این قانون نسبی نیست ! بیشتر اوقات ما در صفحات اول سایت های پرتال مانند که صفحه به چند بخش تقسیم شده ما بیشتر از یک عنوان در صفحه داریم . منظور من عناوین اخبار نیست منظورم بخش ها یا همون Sections هست. اگر به طور مثال ما در اون بخش یه قسمت آخرین خبر ها رو داشته باشیم و در قسمت دیگه آخرین ارسال ها رو مطمئنا ذات صفحه ما دو قسمتی هست مگر اینکه ما نادیده بگیریم یا به خاطر این قانون خودمون رو به کوچه علی چپ راهنمایی کنیم !
همون طور که می دونید من توی صفحه اول تات وب من از دو تا تگ h1 استفاده کردم. ولی خوب شما احتمالا تا الان با خودتون گفتید که همه اینایی که گفتی درست ولی از کجا که معلوم حرف تو درست باشه یه دنیا دارن می گن که نه ! در جواب باید بگم که استفاده از چند تا تگ h1 تا به حال چندین هزار بار از بخش پشتیبانی مدیران سایت گوگل پرسیده شده و در یک ویدئوی رسمی که در وبلاگ وب مستر سنترال گوگل هست آقای Matt Cutts که سرپرست این بخش جستجو هست دقیقا این جواب رو به صورت رسمی داده . به نظر شما اگر خود گوگل می گه مشکلی در استفاده از چند تا تگ h1 نیست آیا بقیه می تونن بگن گوگل غلط کرده ما از گوگل که موتور جستجو خود گوگله بیشتر می دونیم ؟!!!!
البته این مورد رو دقت داشته باشید که طبق صحبت آقای Matt Cutts درسته می شه چند تا تگ h1 داشت ولی دیگه درست نیست کل صفحه رو پر کنیم از تگ h1 . مطمئنا هم اینکه از لحاظ ظاهری قشنگ نمی شه و هم اینکه درست نیست.به یاد داشته باشید در بهینه سازی سایت هیچ چیز صد در صد نیست و همه چیز نسبی هستش
PHP شامل تعدادی از متدهاییست که با نام ” متدهای جادویی ” شناخته میشن.این متدها با دو زیر خط (Underline یا underscore) شروع میشن.این متدها در جاهای مختلف استفاده میشن و خیلی مفید هستن.در ادامه نگاهی میکنیم به متهای جدویی در PHP .
متد سازنده کلاس یا __construct()
اگر با برنامه نویسی شیء گرا در PHP آشنا باشید حتمن با این متد کار کردید.این متد هنگامی که یک نمونه از یک کلاس ساخته میشه اجرا خواهد شد.مثال زیر رو در نظر بگیرید :
class Animal{
function __construct()
{
echo 'Animal';
}
}
$animal = new Animal();
// output : Animal
در کلاس Animal یک متد ایجاد کردیم با نام __construct() و در این متد رشته Animal رو نمایش دادیم. هنگامی که از کلاس Animal یک نمونه ایجاد میکنیم تابع __construct() اجرا میشه و رشته Animal در خروجی نمایش داده میشه.
متد مخرب یا __destruct()
این متد برعکی متد __construct عمل میکنه.یعنی هنگامی که کلاس میخواد از حافظه خارج بشه این متد اجرا میشه.
مثال :
class DB{
…..
function __destruct()
{
$db->disconnect();
}
…..
}
$db = new DB();
unset($db);
در کلاس بالا هنگامی که تابع unset میخواد کلاس $animal رو از حافظه خارج کنه متد __destruct() اجرا میشه و ارتباط با دیتابیس قطع میشه.
Overloading در PHP
در PHP واژه Overloading به معنی ایجاد متدها و متغیرهای داینامیک است. این متدها و متغیر ها به وسیله متدهای جادویی یا Magic Methods ساخته میشن.
ساخت متغیرهای داینامیک در PHP
متد __set
این متد برای ایجاد متغیرهای داینامیک استفاده میشه.متغیرهایی که یا داخل کلاس وجود ندارن یا متغیرهایی که در خارج از کلاس بهشون دسترسی نداریم.
مثال :
class Car
{
private $vars = array() ;
function __set($name , $value)
{
$this->vars[$name] = $value ;
}
}
$car = new Car();
$car->wheel = 4 ;
$car ->color = 'red';
$car->name = 'BMW';
برای داشتن متغیرهای داینامیک بهترین راه استفاده از آرایه هاست. در کلاس Car یک آرایه با نام $vars ایجاد کردیم . دسترسی به آرایه $var به صورت Private تعریف شده یعنی در بیرون از کلاس به این آرایه دسترسی نداریم.سپس با متد __set متغیر $var رو مقدار دهی میکنیم.متد __set دو پارامتر میگیره.اولی نام کلید (key) و دومی مقدار (value) .
هنگامی که شما از کد زیر استفاده میکنید :
$car->color = 'red';
در حقیقت دارین ار زیر رو انجام میدید :
$car->vars['color'] = 'red';
همینطور که میبینید استفاده از متد __set خیلی میتونه در کار با کلاسها به ما کمک کنه.
متد __get()
هنگامی که از متد __set برای ایجاد متغیرهای داینامیک در کلاس استفاده میکنیم نیاز داریم که بتونیم به این متغیرهای داینامیک دسترسی داشته باشیم و از مقادیر این متغیرها استفاده کنیم.با استفاده از متد __get به راحتی میتونیم این ار رو انجام بدیم.
class Car
{
private $vars = array() ;
function __set($name , $value)
{
$this->vars[$name] = $value ;
}
function __get($name)
{
return $this->vars[$name];
}
}
$car = new Car();
//set values
$car->wheel = 4 ;
$car ->color = 'red';
$car->name = 'BMW';
// Get values
echo $car->color ;
متد __get یک پارامتر میگیره که این پارامتر در اصل نام متغیرمونه. هنگامی که از کد :
echo $car->color ;
استفاده میکنیم در حقیقت کد زیر در پشت صحنه اتفاق میافته :
echo $car->vars['color'] ;
ساخت متدهای داینامیک در PHP
در قسمت قبل دیدید که چطوری میتونیم در PHP متغیرهای داینامیک بسازیم و یاد گرفتیم که چطوری از مقادیرشون استفاده کنیم.در این قسمت خواهیم فهمید چطوری میتونیم متد ها یا توابع داینامیک رو با استفاده از متدهای جادویی در PHP پیاده سازی کنیم .
__call متد جادویی
با استفاده از متد __call میتونیم توابعی به صورت داینامیک بسازیم.این تابع دو مقدار میگیره اولی نام متد و دومی پارامترهای تابع مورد نظر رو میگیره. برای درک بهتر به مثال زیر دقت کنید :
مثال : فرض کنید شما یک کلاس برای کار با دیتابیس نوشتید.خیلی خوبه که در کلاس شما توابعی باشه تا به صورت مستقیم با فیلدهای جدول شما در ارتباط باشه.مثلا هنگامی که میخواید با استفاده از فیلد ID درون دیتابیس جستجو کنید تابعی داشته باشید به صورت findByID یا اگر جستوجوی شما بر اساس فیلد name باشه با تابع findByName بتونید دستور SQL مورد نظر رو اجرا کنید.برای این کار دوراه دارید.
اول اینکه به ازای هر فیلد جدولتون یک تابع بسازید مثلا :
class Database
{
…
function findByID($id)
{
$sql = " SELECT * FROM users WHERE id = $id";
return $this->db->query($sql);
}
function findByName($name)
{
$sql = "SELECT * FROM users WHERE name = $name";
return $this->db->query($sql);
}
}
فرض کنید تعداد فیلدهای جدول شما زیاد باشه. استفاده از این روش کار منطقی نیست.
حالا ببینیم روش دوم برای این کار چیه.
روش دوم استفاده از متد جادویی __call
class Database
{
function __call($method , $args)
{
$field =strtolower( substr($method , 6 , strlen($methods) – ۶)) ;
$sql = "SELECT * FROM $this->table WHERE $field = $args[0] " ;
return $this->db->query($sql);
}
}
$db = new Database();
$db->findByID(10);
$db->findByName('saeed');
حالا ببینیم متد جادویی __call چه کاری انجام میده که میتونیم متدهای داینامیک بسازیم.
همینطور که در بالا گفتم این متد دو پارامتر میگیره.اولی نام تارع و دومی آرایه ای از پارامترهایی که باید به تابع داینامیک پاس بشن.مثال بالا یک مثال کاملا عملی برای استفاده از متد __call بود که در خیلی جاها کاربرد داره.
$field =strtolower( substr($method , 6 , strlen($methods) – ۶)) ;
در خط بالا ابتدا از متغیر $method قسمت findBy رو حذف کردیم.رشته ای که باقی میمونه نام فیلد جدولمونه.سپس به حروف کوچک تبدیلش کردیم و داخل دستور SQL ازش استفاده کردیم.
با این کار به تعداد فیلدهای جدول راه هست برای جستو توی دیتابیس!!
متد جادویی __callStatic
این تابع از PHP نسخه ۵٫۳ معرفی شد. دقیقا مثل __call استفاده میشه اما همینطور که از نامش مشخصه برای متدهای static کاربرد داره.
گاهی اوقات ممکنه لازم داشته باشیم یک شیء رو به یک رشته تبدیل کنیم.اگر بخواید با دستور echo یک شیء رو در خورجی چاپ کنید یک خطا اتفاق میافته :
$car = new Car(); echo $car; // fatal error: Object of class Car could not be converted to string
متد __toString()
این زمانی اجرا میشه که بخوایم یک شیء رو در خروجی نمایش بدیم.
class Car
{
function __toString()
{
return get_class();
}
}
$car = new Car();
echo $car ; // Car
اگر داخل کلاس متد __toString() رو پیاده سازی کرده باشیم هنگامی که با دستور echo شیء $car رو میخوایم توی خروجی نمایش بدیم با خطا مواجه نمیشیم.در مثال بالا هنگامی که دستور echo $car; اجرا میشه تابع get_class() اجرا میشه.
باد آوری : تابع get_class() نام کلاس جاری رو بر میگردونه.
Serialization
Serialization به تبدیل یک شیء یا یک آرایه به رشته گفته میشه.از Serialization برای نگهداری اشاء در فایل یا دیتابیس استفاده میشه.هنگامی یک شیء رو به حالت اول برگردونیم Unserialize گفته میشه.هنگامی یک کلاس رو serialize میکنیم تمام متغیرها و اعضای کلاس ذخیره خواهند شد.اما مشکلی که هست اینه که ممکنه نخواسته باشیم مثلا متغیری که کانکشن دیتابیس رو تگهداری میکنه هم ذخیره یشه.برای این کار از متد __sleep() استفاده میکنیم.
متد جادویی __sleep()
این متد هنگامی اجرا میشه که تابعserialize() رو بخوایم روی شیء اجرا کنیم.داخل این متد میتونیم مشخص کنیم که چه متغیرهایی از کلاس اجازه دارن serialize بشن.این متد باید یک آرایه رو برگردونه.
مثال :
class My
{
public $a;
public $b;
function __construct(){
$this->b = 'salam';
$this->a = 'a';
}
function __sleep()
{
//return get_object_vars($this);
return array('b');
}
}
$m = new My();
$a = (serialize($m));
var_dump(unserialize($a));
/*خروجی :
object(My)#2 (2) { ["a"]=> NULL ["b"]=> string(5) "salam" }
*/
همینطور که میبینید در خروجی کد بالا فقط متغیر $b دارای مقدار هست.این به این خاطره که آرایه ای که در متد __sleep() برگردانده شده فقط شامل متغیر b هست.
return array('b');
این هط میگه که هنگام serialize کلاس My فقط متغیر b حق ذخیره شدن رو داره.
متد __wakeup()
این متد هنگامی اجرا میشه که تابع unserialize() اجرا میشه.به عنوان مثال اگر هنگام serizalize یک شیء اتصال به دیتابیس رو بسته باشید داخل متد __wakeup میتونید این اتصال رو دوباره برقرار کنید.
class Database {
//...
public function __wakeup() {
// reconnect to the network
$this->connect();
}
//...
}
متد __invoke()
این متد هنگامی اجرا میشه که بخواید از یک شیء به عنوان یک تابع استفاده کنید.
خروجی بالا به شکل زیره :
__invoke method. $x = 5
متد جادویی __autoload()
متدهایی که در قسمت قبل آموزشش رو مشاهده کردید همگی در کلاسها قابل استفاده بودن. تابع __autoload یک تابع مستقل محسوب میشه.این تابع برای لود مستقیم کلاسها به کار میره.هنگامی که میخواید از یک کلاس یک شیء ایجاد کنید ابتدا نیاز هست که با دستور include یا require کلاس مورد نظر رو لود کنیم.
require 'classes/database.class.php'; $db = new Database();
با استفاده از تابع __autoload از require کردن های زیاد راحت میشیم.
در مثال بالا تمام کلاسهای پروژه ما در پوشه classes نگهداری میشن.
function __autoload($classname)
{
$class = 'classes/'.strtolower($classname).'.class.php';
require $class;
}
با استفاده از تابع بالا در هر جای پروژه میتونیم به صورت خودکار کلاسها رو لود کنیم.
$db = new Database();
حرف آخر
متدهای جادویی در PHP خیلی مفید هستن و انعطاف زیادی به برنامه نویسی شیء گرا میدن.با استفاده از این متدها لذت برنامه نویسی شیء گرا دوچندان میشه.
اگر دقت کرده باشید در مقاله بالا سعی کردم ازاصطلاحات ساده برای دوستانی که اول راه هستند و با برنامه نویسی شیء گرا آشنایی زیادی ندارن استفاده کنم.مثلا یک جا از کلمه “متد (Method) ” و جای دیگه از کلمه ” تابع (function) ” استفاده کردم.منظورم از این کار این بوده که به کسانی که اول راه شیء گرایی هستن بفهمونم این ها فقط “اصطلاح” ـه و ممکنه در جاهای مختلف نامهای مختلفی داشته باشه.هنگامی که یک تابع در یک کلاس قرار میگیره به اصلاح بهش میگن ” متد ” اما مهم نیست بهش چی میگن مهم اینه که “تابع” همون “متد” ـه.
مهم درک مفهوم شیء گرایی هست و لطفا ذهن خودتون رو درگیر این اصطلاحات نکنید.
بیشتر بدانید:
UML زبان استاندارد جهانی برای مدلسازی
سطح : مقدماتی
با كمی اغماض میتوان ادعا كرد كه در ميان شاخههای مختلف مهندسی در هركدام كه دارای قدمت بيشتری است، همگرايی بيشتری در اتخاذ روش و ابزار برای انجام اعمال نسبتاً مشابه از ميان متخصصان و متوليان آن رشته وجود دارد. به طور مثال در حال حاضر برای اجرای يك سازه در هر نقطه از دنيا، مهندسين عمران از يك روند همسان با توالی مشابه شامل:
الف)توليد طرح عمرانی
ب)پيادهسازی نقشه
ج)محاسبات سازهای
د)اجرا استفاده میكنند
ولی در رشته نوپايی چون مهندسی نرمافزار، گاه چنان روشها متفاوت است كه از ديد يك ناظر خارجی، دو تيم نرمافزاری مختلف كه هر دو قصد توليد محصولی مشابه را دارند، دو تيم در رشتههای متفاوت به نظر بيايند. يكی از علل وجود تمايز در توليد نرمافزار ميزان تخصص نيرو و زمان به پيادهسازی میباشد.بدين معنا كه در نزد بسياری از برنامهنويسان توليد نرمافزار معادل است با توليد كد. ولی از نظر بعضی ديگر توليد كد تنها بخشی از توليد نرمافزار است كه در بسياری از موارد حتی منابع و زمان. اختصاص داده شده به آن در طول پروسه.توليد نرمافزار كمتر از50% میباشد.
از يك ديدگاه كلی، پروسه توليد نرمافزار را میتوان به دو بخش كلی شامل:
الف)تحليل و طراحی ب)پيادهسازی تقسيم كرد. از ديدگاه دسته اول، برنامهسازان، تحليل و طراحی صرفاً فهم ذهنی مساله میباشد كه دقيقا پس از آن بايستی اقدام به پيادهسازی كرد. در حاليكه در نظر دسته دوم، فاز تحليل و طراحی پر اهميتتر از فاز دوم میباشد كه بايستی برای انجام آن از متدولوژیها و روشهای استاندارد استفاده كرد. UML يك زبان مدلسازی میباشد كه در فاز تحليل و طراحی مورد استفاده قرار میگيرد.
مدلسازی (Modelling) چيست؟
مدلسازی يكی از تكنيكهای ذهنی بشر میباشد كه نه تنها برای اهداف علمی، بلكه برای انجام امور روزمره بشر به دفعات مورد استفاده قرار میگيرد. مدلسازی به طور كلی يعنی شبيهسازی يك محيط با اندازههای متفاوت و از محيط واقعی و احتمالا مواد و مصالحی متمايز از جنس مواد و مصالح محيط مدل شده. در مدلسازی ابتدا اجزای محيط واقعی انتخاب شده و متناسب با هدف مورد نظر از مدلسازی خصوصياتی از هريك از اجزای واقعی انتزاع میشود، يعنی به ازای هزيك از اجزای محيط واقعی يك موجوديت تجريدی ساخته میشود و با برقراری ارتباطی مشابه با ارتباط اجزای واقعی، در ميان موجوديتهای تجريدی، محيط واقعی مدل میشود. برای روشن شدن مثالی میزنيم:
فرض كنيم قصد داشته باشيم در فاز طراحی يك اتومبيل ميزان موفقيت هوا در مقابل اتومبيل در حال حركت را بسنجيم يكی از راهها برای انجام اين آزمايش، ساخت يك اتومبيل واقعی، راندن و سپس اندازهگيری مقاومت هوا میباشد كه انجام اينكار اگرچه ما را به هدف میرساند، ولی دارای هزينه بالاييست چرا كه بايستی ابتدا ماشين ساخته شود، سپس مورد آزمايش قرار گيرد.در اين صورت اگر در آزمايش به نتيجه مورد نظر نرسيم، بايستی دوباره طراحی را تغيير داد، و پس از ساخت يك نمونه واقعی ديگر آزمايش را تكرار كنيم و اين روند آنقدر ادامه پيدا كند تا طراحی مناسب برای اتومبيلی با خصوصيات مورد نظر شكل گيرد. میبينيم كه چنين روشی بسيار پرهزينه است و اين هزينه هم شامل هزينههای اقتصادی است و هم هزينههای زمانی، چون علاوه بر اين كه در هر مرحله آزمايش بايستی اتومبيل با صرف هزينه بالا ساخته شود، زمان ساخت آن نيز طول خواهد كشيد.
ولی متخصصان برای انجام چنين آزمايشی به مدل روی میآورند. يعنی يك جسم فيزيكی كوچك با خصوصيات آئروديناميكی لحاظ شده در طراحی اتومبيل، ساخته میشود و با قرار دادن آن در يك تونل باد، حركت اتومبيل در فضای واقعی را شبيه سازی میكنند و بدين طريق ميزان مقاومت هوا را میسنجند.
نكات مورد توجه در اين مدلسازی، يكی اندازه مدل و ديگری خصوصيات آن میباشد. مدل بسيار ساده و كوچك میباشد و از طرفی تنها خصوصيت آئروديناميكی اتومبيل در مدل لحاظ میشود. چرا كه هدف ما از مدلسازی تنها بررسی خصوصيات آئروديناميكی اتومبيل است و مدل الزاماً نبايستی از جنبههای ديگر، شباهتی به اتومبيل واقعی داشته باشد. مثلا در ساخت چنين مدلی به هيچوجه به استحكام اجزا و يا زيبايی مدل توجه نمیشود چون بررسی چنين خصوصياتی خارج از هدف اين مدلسازی خاص است.
مثال بالاتنها يك جنبه از مدلسازی را بيان میكند و آن جنبه شناختExploration میباشد. يعنی در مدلسازیهای مشابه مدلسازی فوقالذكر، هدف از مدلسازی تنها شناخت محيط مورد مدل میباشد. يك جنبه ديگر از مدلسازی تبيين (specitication) میباشد. يعنی گاه برای معرفی و ارائه خصوصيات يك موجوديت واقعی يك مدل از آن ارائه میشود. نقشه جغرافيايی مثال خوبی است كه اين جنبه از مدلسازی را مورد نظر دارد.
پس میتوان گفت كه هدف از مدلسازی دو چيز میباشد:
الف)شناخت(exploration)
ب)تبيين(specification)
تدریس UML
كه بر اساس تعريف مسئله، مدلسازی يكی يا هردو هدف را در نظر میگيرد.
نكته ديگری كه بايستی در مدلسازی توجه كرد، روش (methodo logy) ساخت يك مدل میباشد. در بعضی موارد مدل چيز بسيار سادهای است و به راحتی ساخته میشود. ولی در بعضی از موارد مدل خود بسيار پيچيده میباشد هر چند از نظر منطقی غيرممكن مینمايد ولی میتوان ادعا كرد كه در بعضی موارد مدل پيچيدهتر از موجوديت واقعی است. زمينهای كه اين ادعا را در آن مصداق فراوان دارد، نرمافزار میباشد. بنابراين در شاخهای از مهندسی كه مدلسازی حائز اهميت فراوان میباشد قطعا روشهای استانداردی برای ساختن مدل وجود دارد. در نرمافزار، روشهای توليد نرمافزار مانند SSAPM ,RUP,USDP, در واقع روشهای مدلسازی میباشند. هر روش مدلسازی طبيعتا نيازمند مصالحی برای ساخت مدل میباشد كه در روشهای مدلسازی نرمافزاری مصالح لازم برای توليد مدل، زبانهای مدلسازی میباشند.
UML چيست؟
Unified Modelling Language يك زبان مدلسازی است كه درسال 1995 به وسيله شركت Rational معرفی شد. UML يك زبان شیگراست يعنی اجزا اين زبان متناسب با مفاهيم به كاررفته و پارادايم شیگرائی طراحی شدهاند.
پس از ارائه مفاهيم شیگرائی در ابتدای دهه 80 ميلادی به تدريج روشهای شیگرائی توليد نرمافزار به وسيله افراد و سازمانهای مختلف ارائه گرديد. اين روشها در برگيرنده يك مجموعه علائم برای بيان مفاهيم و ايدهها از يك سو و يك طرح كاری برای توليد نرمافزار از سوی ديگر بود كه از مهمترين اين روشها میتوان به OMT,BOOCH,OOSE…. اشاره كرد.
اگرچه داشتن يك روش استاندارد امری مطلوب است ولی تفاوت روشها امريست طبيعی و با توجه به تفاوت فراوان در نوع مسائل میتوان گفت كه حتی وجود روشهای مختلف الزامی است چرا كه مثلا در يك پروژه بسيار بزرگ نمیتوان همان روشی را به كار برد كه در يك پروژه كوچك. ولی زبان و مجموعه علائم از چنين قاعدهای پيروی نمیكند و داشتن يك زبان استاندارد امری بسيار مطلوب و از بعضی ديدگاهها حتی الزامی میباشد. يكی از الزامات مهم در داشتن يك زبان استاندارد همگانی ناشی از نقشی است كه زبان در ارتباطات به عهده دارد. البته چندگونهبودن زبان خود مولد مشكلات متعددی است.
با هدف ارائه يك زبان استاندارد فراگير شركت Rational با گردآوری سه نفر از ارائهكنندگان معتبرترين روشهای شیگرا يعنی Irar jacobson مبدع روش OOSE ,BOOCH مبدع روشی با همين نام، Rambaugh مبدع روش OMT و با اخذ نقاط قدرت سه روش فوقالذكر، يك زبان استاندارد به نامUML ارائه كرد. اين زبان پس از ارائه از سوی (Object Mamgement Group) كه يكی از معتبرترين سازمان جهانی در زمينه شیگرائی میباشد بعنوان يك استاندارد پذيرفته شد. پس از ارائه اين زبان و پذيرفته شدن آن به عنوان يك استاندارد جهانی در زمينه نرمافزار، علاوه پروسه اين زبان و ارائه متولوژیهای مبتنی بر آن مانند usop و rup از سوی افراد و سازمانهای مختلف، متخصصين در پی يافتن كاربرد اين زبان در زمينههای ديگر فنی و مخصوصی بر آمدند. برآيند اين تلاشها در حال حاضر uml را به عنوان قدرتمندترين زبان مدلسازی در دنيای نرمافزار مطرح ساخته است.
اولين فنجان قهوه (قسمت اول از سوم) اولین فنجان شما از ] قهوهء[ جاوا ( برای Microsoft Windows ) چند دستورالعمل جزئی؛ برای اولین برنامه شما دستورالعمل های زیر به شما کمک میکنند اولین برنامهء جاوای خود را بنویسید. این دستورالعملها برای کاربران سیستمهای Microsoft Windows ، که شامل Windows 9598/2000/ME/XP/NT 4.0 میشود ، نوشته شده. اول با کارهایی که قبل از نوشتن اولین برنامه باید انجام دهیم شروع میکنیم. سپس، با توضیح مراحل ساختن یک application ، مراحل ساختن یک applet و توضیحاتی در مورد error هایی که با آنها مواجه خواهید شد، به کار خود ادامه میدهیم. 1. کارهایی که اول باید انجام دهیم 2. ساختن اولین application شما الف. نوشتن یک فایل جاوا ب. compile کردن فایل پ. اجرای برنامه 3. ساختن اولین applet شما 4. بعدش چیکار کنیم! 1. کارهایی که اول باید انجام دهیم برای نوشتن اولین برنامهء خود، به موارد زیر نیاز دارید : 1- . The JavaTM 2 Platform, Standard Edition شما میتوانید SDK (Software Development Kit = بستهء توسعهء نرم افزار ) را از اینجا بگیرید. مواظب باشید که SDK را download میکنید، نه JRE . 2- یک ویرایشگر متن . در این مثال ما از NotePad استفاده خواهیم کرد. برای پیدا کردن NotePad ، در منوی Start ؛ Programs > Accessories > NotePad را انتخاب کنید. اگر از ویرایشگر متن دیگری استفاده میکنید، باز هم میتوانید از این دستورالعملها استفاده کنید. دو مورد بالا تمام چیزیست که شما برای نوشتن اولین برنامهء جاوای خود به آن نیاز دارید. توجه: ممکن است که شما بخواهید برای نوشتن برنامهء خود از یک IDE (Integrated Development Environment) استفاده کنید. شما میتوانید از Java 2 SDK, Standard Edition v. 1.4 استفاده کنید که دربر دارندهء یک IDE به نام Sun™ ONE Studio 4, Community Edition که قبلا با نام ForteTM for JavaTM, Community Edition شناخته میشد، استفاده کنید. شما میتوانید این IDE را از اینجا بگیرید. 2. ساختن اولین application شما اولین برنامهء شما،HelloWorldApp ، خیلی ساده به شما پیغام "Hello World!" را نشان میدهد. برای نوشتن این برنامه شما باید: - یک فایل جاوا بنویسید. یک فایل جاوا تشکیل شده از متنی که به زبان برنامه نویسی جاوا نوشته شده؛ متنی که برای شما و دیگر برنامه نویسان جاوا قابل فهم باشد. شما میتوانید از هر ویرایشگر متنی برای نوشتن این برنامه استفاده کنید. - Compile کردن فایل جاوا به bytecode . Compiler (javac) ، فایل شما را گرفته و متن آنرا به دستورالعملهایی تبدیل (ترجمه) میکند که قابل خواندن توسط "ماشین مجازی جاوا" (JVM = Java Virtual Machine) باشد. Compiler این دستورالعملها را به bytecode تبدیل میکند. - اجرای برنامهء تبدیل شده به bytecode . مفسر جاوا (java interpreter) که روی کامپیوتر شما نسب شده، Java VM را پیاده سازی و اجرا میکند. این مفسر bytecode های شما میگیرد و با ترجمه کردن آنها به دستورالعملهایی که برای کامپیوتر شما قابل فهم هستند، آنها را اجرا میکند. چرا bytecode ها چیزهای خوبی هستند! احتمالا شنیده اید که با برنامه نویسی جاوا، میتوانید "یکبار بنویسید، هرجا میخواهید اجرا کنید." این بدان معنیست که در هنگام compile کردن برنامه، اطلاعات فقط برای استفاده از یک محیط (platform) خاص تولید نمیشوند. بلکه bytecodeها تولید میشوند که دستورالعملهایی برای استفادهء "ماشین مجازی جاوا"((JVM = Java Virtual Machine میباشند. در نتیجه اگر محیط شما –اعم از اینکه Windows ، UNIX،MacOS و یا یک Internet Browser باشد- دارای JVM باشد؛ میتواند bytecodeها را بخواند. الف. نوشتن یک فایل جاوا. برای ساختن اولین فایل جاوا، دو راه حل دارید: - میتوانید فایل HelloWorldApp.java را روی کامپیوتر خود ریخته و از نوشتن دستورها خودداری کنید. سپس میتوانید مستقیما به قسمت ب بروید. - یا، میتوانید دستورهای زیر را دنبال کنید: 1.NotePad را باز کنید و کدهای زیر را در آن وارد نمایید: /** * The HelloWorldApp class implements an application that * displays “Hello World!” to the standard output. */ public class HelloWorldApp { public static void main(String[] args) { // Display “Hello World!” System.out.println(“Hello World!”); } { هنگام تایپ کردن مراقب باشید همهء کدها را دقیقا همانطور که در بالا نوشته شده بنویسید. زیرا compiler و مفسر (interpreter) جاوا ، case-sensitive هستند؛ یعنی به کوچک یا بزرگ بودن حروف حساسند. HelloWorldApp 2.این کد را در یک فایل ذخیره کنید. در menu bar، File > Save As را انتخاب کنید. - در قسمت Save in دایرکتوری را که میخواهید فایلتان را در آن ذخیره کنید؛ مشخص نمایید. در این مثال، دایرکتوری java در درایو c محل ذخیرهء فایل انتخاب شده. - در قسمت File name تایپ کنید : "HelloWorldApp.java" . - در قسمت Save as type ، Text Document را انتخاب کنید. حالا دکمهء Save را بزنید و از NotePad خارج شوید.
آموزش جاوا


helloworldapp
خود آموز SQL به شما نحوه استفاده از SQL و دستیابی وکنترل داده ها را توسط آن در MY SQL,MS ACCESS ,SQL SERVER, ORACLE, SYBASE,DB2 و دیگر سیستم های پایگاه داده ای آموزش میدهد.
SQL بر پایه زبان پرس و جو ساخت یافته میباشد
SQL به شما اجازه دستیابی و کنترل داده ها را می دهد
SQL یک استاندارد ANSI( انجمن استاندارد ملی آمریکا) میباشد.
SQL میتواند درخواستهای پیوسته یک پایگاه داده را اجرا کند
SQL متواند دوباره اطلاعات را از پایگاه داده پس بگیرد
SQL میتواند یک رکورد شامل اطلاعات را در پایگاه داده ذخیره کند
SQL متواند اطلاعات پایگاه داده را به روز رسانی کند
SQL میتواند هر قسمت از اطلاعات را از پاگاه داده اصلاح یا حذف کند
SQL میتواند یک پایگاه داده تازه بسازد
SQL میتواند جداول حاوی اطلاعات جدید را به پایگاه داده اضافه کند
SQL اجازه تنظیم جداول و شیوه دستیابی به اطلاعات و نحوه نمایش اطلاعات را میدهد.
با وجود آنکه SQL یک استاندارد است اما ورژن های مختلفی از آن وجود دارد
به هرحال SQL یک استاندارد ANSI میباشد و با آن مطابقت دارد و از تمام دستورات اصلی از طریق مشابه پشتیبانی میکند مثل(SELECT,UPDATE ,DLELET,INSERT,WHERE)
نکته : بسیاری از برنامه های پایگاه داده ای SQL شاخه های اختصاصی خودشان را به استاندارد SQL اضافه میککنند.
اگر میخواهید وب سایتی بنویسید که از پایگاه داده اطلاعاتی را نمایش دهد به ابزار زیر احتیاج پیدا خواهی کرد:
یک برنامه RDBMS (MY SQL,SQL SERVER, MS ACCESS)
یک زبان سمت کاربر مانند PHP ,ASP,
SQL
HTML/CSS
RDBMS بر پایه RELATIONAL DATABASES MANAGEMENT SYSTEM میباشد.
RDBMS پایه ای برای SQL و تمام سیستم های پایگاه داده ای جدید(,SQL SERVER, ORACLE, SYBASE,DB2 MYSQL,MS ACCESS ) میباشد.
در RDBMS داده ها و اطلاعات موجود در پایگاه داده در جداول ذخیره میگردد.
جدول یک مجموعه ای است از اطلاعات ثبت شده مرتبط و وابسته به هم که از ستون ها و ردیف ها تشکیل شده است.
دو نوع سیستم دیتابیس داریم که در زیر به معرفی آنها می پردازیم:
OLTP (online transaction processing).1
در این نوع سیستم بوسیله نرمال کردن داده ها (در مورد نرمال سازی دیتابیس در پست های بعدی توضیح داده خواهد شد ) بروز رسانی داده ها بسیار سریع و کوتاه خواهد شد. تعییرات زیاد در این نوع سیستم ها،پشتیبان گیری از دیتابیس را امری الزامی می سارد.سرعت خوب در اینگونه سیستم ها امری ضروری است. بنابراین در این نوع سیستم ها از ایندکس گذاری به وفور استفاده می شود.(در مورد ایندکس در پست های بعدی توضیح داده خواهد شد)از ایندکس گذاری به منظور دسترسی سریع به داده های جداول استفاده می شود.
OLAP (online analytical processing) .2
در این نوع سیستم ها بروز رسانی داده ها به ندرت انجام می شود. بنابراین پشتیبان گیری از دیتابیس به عنوان یک عمل نهایی تلقی می شود و کمتر انجام می شود. بیشتر پردازش مربوط به آنالیز داده های موجود می باشد. برخلاف سیستم های OLTP از طراحی استاندارد و نرمال سازی استفاده نمی شود. از ایندکس گذاری هم به ندرت استفاده می شود. در این نوع دیتابیس ها، معمولا یک یا دو جدول بزرگ وجود دارد بر خلاف OLTO که در آن چندین جدول با یکدیگر در ارتباط هستند.
با توجه به تعاریف مشخص است که ما از نوع اول (OLTP) در این دوره آموزشی استفاده می ک
آموزش طراحي وب در سطوح مقدماتي تا پيشرفته بهمراه برگزاري
كارگاه عملي مربوطه در آموزشگاه تحليل داده (با مجوز رسمي از وزارت
كار) با بيش از 10 سال سابقه درخشان آموزشي و برگزاري دوره هاي تخصصي برنامه نويسي .
جهت كسب اطلاعات بيشتر و دريافت مشاوره رايگان و ثبت نام در
كلاسهاي حضوري با شماره هاي 88146330 و 88146323 و 09123840871 تماس حاصل فرماييد .
از سايت رسمي آموزشگاه www.tahlildadeh.com ديدن فرماييد .
دستهها، آخرینها، آمار و ابزارهای کاربردی در یک نگاه.
نام کاربری یا ایمیل خود را وارد کنید
کد ۶ رقمی ارسالشده به ایمیل و رمز عبور جدید را وارد کنید.
در چند ثانیه حساب کاربری خود را بسازید
دیدگاه خود را با ما در میان بگذارید
ورود کاربران
خوش آمدید! لطفا وارد حساب خود شوید