دوره های آموزشی برنامه نویسی تخصصی

آموزشگاه تحلیل داده با بیش از 10 سال سابقه درخشان در آموزش زبانهای تخصصی برنامه نویسی کامپیوتر

دوره های آموزشی برنامه نویسی تخصصی

آموزشگاه تحلیل داده با بیش از 10 سال سابقه درخشان در آموزش زبانهای تخصصی برنامه نویسی کامپیوتر

کلاس های جنریک در سی شارپ

کلاس های جنریک (عمومی) کلاس هایی هستند که از آنها می توان برای انواع داده های متفاوت استفاده کرد.

قبل از این که به بحث کلاس های عمومی بپردازیم  بهتر است به توابع عمومی (جنریک) نگاهی بیندازیم. به یک مثال توجه کنید. فرض کنید می خواهیم یک تابع به نام sum برای جمع کردن دو عدد ورودی بنویسیم. توابع زیر می توانند برای این منظور تعریف شوند:

public int sum( int a, int b)
{
   return (a + b);
}

public double sum( double a, double b)
{
   return (a + b);
}

public byte sum( byte a, byte b)
{
   return (a + b);
}

وقتی که این سه تابع را تعریف می کنیم، هنگامی که تابع sum را با پارامترهایی از نوع int فراخوانی می کنیم، تابع اول فراخوانی می شود. اگر همین تابع sum را با پارامترهایی از نوع double فراخوانی کنیم، تابع دوم فراخوانی می شود و ... . در اینجا ما سه بار تابع sum را تعریف کرده ایم.

در توابع عمومی (جنریک) می توان تابع فوق را یک بار و به صورت زیر تعریف کرد:

public double sum(T a, T b)
{
   if( typeof(T) == typeof(int))
   {
      return (double)( Convert.ToInt32(a) + Convert.ToInt32(b));
   }
   if( typeof(T) == typeof(double))
   {
      return Convert.ToDouble(a) + Convert.ToDouble(b);
   }
   if( typeof(T) == typeof(byte))
   {
      return (double)( Convert.ToByte(a) + Convert.ToByte(b));
   }
   return 0;
}

حالا برای فراخوانی تابع sum می توانیم از دستور زیر استفاده کنیم:

double result = sum(12.509, 49.4);

همانطور که می بینید با توجه به ورودی تابع که بین < >قرار گرفته است، پارامترهای تابع متناسب با آن عمل می کنند. در این مثال شاید دو سوال ذهن شما را درگیر کرده باشد: 1- کد تابع sum نسبت به قبل پیچیده تر شده است. 2- خروجی برای تمام ورودی ها از نوع double است. 
در پاسخ به این سوالات باید گفت که با توجه به مثالی که ذکر شده و با توجه به عملی که در این تابع انجام می شود (یعنی عمل جمع) کد تابع کمی پیچیده شده است ولی در مورد توابعی که در ادامه خواهیم گفت، فوق العاده کار را ساده می کنند. و اما در مورد سوال دوم. خروجی تابع sum می تواند از نوع T باشد. یعنی اپر کاربر هنگام فراخوانی تابع sum به صورت sum(12, 20); ž عمل کند خروجی نیز از نوع short بشود ولی در این مثال فقط برای سادگی کار این عمل را انجام ندادیم.

در مورد کلاس های جنریک هم قضیه به همین صورت است. مثال زیر یک کلاس جنریک را که برای گره لیست پیوندی نوشته شده است را نشان می دهد:
public class Node
{
   public T data;
   public T next;
   
   public Node(T value)
   {
       data = value;
       next = null;
   }
}
اگر همین کلاس را می خواستیم برای انواع داده مختلف تعریف کنیم، کار بسیار دشواری پیش رو داشتیم. اگر برای همین کلاس بخواهیم تعیین کنیم که ورودی کلاس (یعنی T) از نوع داده های عددی باشد، یعنی int, double, byte, short, single و ... می توانیم خط اول کلاس را به صورت زیر تغییر دهیم:
public class Node where T: struct
{
...
}
خط اول تعریف بالا به کامپایلر سی شارپ می گوید که ورودی تعیین شده (یعنی T) فقط باید از انواع داده ای عددی (یا به طور تخصصی تر انواع داده هایی که valued-type هستند و نه referenced-type) باشد.

برای توضیح بیش تر به کلاس لیست پیوندی تعریف شده زیر توجه کنید (توضیحات به خود شما واگذار می شود!):

public class Node where T : struct
{
    public T data;
    public Node next;
    public Node(T value)
    {
        data = value;
        next = null;
    }
}

public class myLinkedList where Y : struct
{
    private Node head, cur, end;
    public int Count;

    public myLinkedList()
    {
        // set head, cur and end to null
        head = cur = end = null;
        // count contains count of items available in the list
        Count = 0;
    }

    public void Add(Y newValue)
    {
        // if there is not any data create head of list
        if (head == null)
        {
            head = end = new Node(newValue);
        }
        else
        {
            end.next = new Node(newValue);
            end = end.next;
        }
        Count++;
    }

    public Y[] ToArray()
    {
        Y[] result = new Y[Count];
        cur = head;
        int i = 0;
        while (cur != null)
        {
            result[i] = cur.data;
            cur = cur.next;
        }
        return result;
    }
}
برای فهم بهتر سی شارپ به اینجا رجوع کنید

دوره آموزشی #C

عنوان دوره : دوره آموزشی  C#

 

پیش نیاز: آشنایی با منطق برنامه نویسی

 نرم افزار های مورد استفاده:

  MICRSFT VISUAL STUDI 2010

MICRSFT SQL SERVER 2008 R2

 فهرست مخاطبین:

  •  این دوره برای افرادی طراحی شده است که با یک زبان برنامه نویسی آشنایی دارند و می خواهند دانش عملی خود را در زمینه برنامه نویسی شیءگرا، مفاهیم پایه ای .NET Framewrk افزایش دهند.
  •  برنامه نویسانی که برنامه نویسی را به طور تجربی آموخته اند و دانش کافی از معماری .NET، نحوه مدیریت حافظه در .NET و ویژگیهایی نظیر Genericها، delegate ها، Bxing و UnBxing  و همچنین Reference Typeو  Value Type و تفاوت آنها و ... را به خوبی    نمی دانند از مخاطبین این دوره هستند.
  •  دانشجویانی که با تکنولوژی XML و کاربردهای آن در صنعت نرم افزار آشنا نیستند و یا به صورت عملی برنامه نویسی ننموده اند نیز از مخاطبین این دوره هستند.

 اهداف دوره:

  • مبانی C#
  •  متغیرها
  •  کنترل جریان
  •  حلقه ها
  •  دستورات پرش (Jump)
  •  آبجکت ها و انواع دادهای
  •  متد ها
  •  خاصیت ها
  • وراثت
  • عملگر ها و Cast ها
  • رشته ها و عبارات با قاعده
  • مجموعه ها
  • Generic ها
  • خطاها و Exceptin ها
  •  کار با Visual Studi 2010
  • فرم ها و کنترلهای ویندوزی
  •  AD.Net
  •  Cnnectin riented Database Prgramming
  •  Cnnectin Less Database Prgramming
  •  XML و .NET
  •  اعمال تغییرات dcumentهای XML با استفاده از Mdel Dcument bject
  •  خواندن و نوشتن dcumentهای XML
  •  دسترسی به dcumentهای XML با استفاده از مدل Xpath Data

 

سرفصلهای دوره:

  • مبانی #C
  • پیش از شروع کار
  • اولین برنامه C# شما
  • کد برنامه
  • کامپایل و اجرای برنامه
  • نگاهی دقیق تر

متغیرها

  • مقدار دهی متغیرها
  • محدوده (scpe) متغیر
  • تداخلات scpe مربوط به متغیر محلی
  • تداخلات scpe مربوط به فیلد ها و متغیر های محلی
  • ثابت ها (Cnstants)
  • انواع داده ای از پیش تعیین شده
  • انواع مقداری و انواع ارجاعی
  • انواع CTS
  • انواع مقداری از پیش تعیین شده
  • انواع integer
  • انواع Flating-pint (نقطه اعشار)
  • نوع دسیمال
  • نوع بولین (Blean )
  • نوع کاراکتری
  • انواع ارجاعی از پیش تعیین شده
  • نوع آبجکت (bject)
  • نوع رشته ای (String)

 کنترل جریان

  • دستورات شرطی
  • دستور if
  • دستورswitch

 حلقه ها

  • حلقۀ fr
  • حلقۀ While
  • حلقۀ d…while
  • حلقۀ freach

 دستورات پرش (Jump)

  • دستور gt
  • دستور break
  • دستور cntinue
  • دستور return
  • Enumeratin ها

 

آبجکت ها و انواع دادهای

  • کلاس ها و ساختارها
  • اعضای کلاس
  • اعضای داده ای (Data Members)
  • اعضای تابعی (Functin Members)

 متد ها

  • تعریف کردن متد ها
  • بکارگیری متد ها
  • ارسال پارامتر ها به متد ها
  • پارامتر های ref
  • پارامتر های خروجی
  • عمل verlading متد

 خاصیت ها

  • خاصیت های فقط خواندنی و فقط نوشتنی
  • معرف های (mdifiers) دسترسی مربوط به خاصیت ها
  • نکته ای در مورد عمل inlining
  • سازنده ها (Cnstructrs)
  • سازنده های ایستا (Static Cstructrs)
  • فراخوانی سازنده ها از طریق سایر سازنده ها
  • فیلد های فقط خواندنی
  • ساختار ها (structs)
  • ساختار ها از انواع مقداری هستند
  • ساختار ها و وراثت
  • سازنده های مربوط به ساختار ها
  • کلاس های Partial (بخش بخش شده)
  • کلاس های ایستا (Static Class)
  • کلاس bject متد های System.bject
  • متد ()TString

وراثت

  • انواع وراثت
  • وراثت پیاده سازی (Implementatin) در مقابل وراثت واسط
  • وراثت چند گانه (multiple inheritance)
  • ساختار ها و کلاس ها
  • پیاده سازی وراثت
  • متد های مجازی
  • پنهان سازی متد ها
  • فراخوانی نسخه های پایه ای (Basic) توابع
  • کلاس ها و توابع مجرد(Abstract)
  • کلاس ها و متد های sealed (مهر و موم شده)
  • سازنده های کلاس های مشتق شده
  • افزودن یک سازنده بدون پارامتر به یک سلسله مراتب
  • افزودن سازنده های با پارامتر به یک سلسله مراتب
  • تعریف کننده ها (Mdifiers)
  • تعریف کننده هی مرئیت (visibility mdifiers)
  • سایر mdifier ها
  • واسط ها(Interfaces)
  • تعریف و پیاده سازی واسط ها
  • واسط های مشتق شده (Derived Interface )

 

عملگر ها و Cast ها

  • عملگر sizef
  • عملگر typef
  • مقایسه آبجکت ها برای تساوی (Equality)
  • مقایسه انواع ارجاعی از نظر Equality (تساوی)
  • متد مجازی Equals()
  • متد ایستای Equals()
  • عملگر مقایسه (==)
  • تبدیلات user-defined
  • پیاده سازی cast های user-defined
  • تبدیلات (casts) مابین کلاس ها
  • Cast های bxing و unbxing
  • رشته ها و عبارات با قاعده
  • System.String
  • ساخت رشته ها
  • اعضای StringBuilder
  • قالب بندی رشته ها
  • چگونه رشته قالب بندی می شود
  • مثال FrmattableVectr
  • عبارتهای با قاعده (Regular Expressins)
  • مقدمه ای بر عبارت های با قاعده

مجموعه ها

  • بررسی گروه هایی از آبجکت ها
  • Cllectin ها
  • تعریف یک مجموعه
  • لیست های آرایه ای(ArrayList)
  • دیکشنری ها و HashTable ها

Generic ها

  • مروری بر Generic ها
  • کارایی (Perfrmance)
  • تعیین نوع ایمن(Type Safety)
  • استفاده مجدد از کد باینری
  • افزایش میزان کد ها
  • قواعد نام گذلری
  • کلاس های مجوعه Generic
  • مروری بر روی مجموعه های Generic
  • بکارگیری کلاس List

خطاها و Exceptin ها

  • نگاهی به خطا و مدیریت خطا
  • کلاس های Exceptin
  • کلاس های Exceptin کلاس پایه (base)
  • به دام انداختن خطا ها
  • پیاده سازی چندین بلاک catch
  • به دام انداختن Exceptin هایحاصل از سایر کد ها
  • خاصیت های System. Exceptin
  • اگر یک Exceptin مدیریت نشود چه اتفاقی می افتد؟
  • بلاک های try تودر تو
  • اصلاح نوع Exceptin
  • مدیریت Exceptin های مختلف موجود در مکان های مختلف
  • کلاس های خطای User-Defined
  • به دام انداختن Exceptin های User-Defined
  • تعریف کردن کلاس های Exceptin

Visual Studi 2010

  • کار با Visual Studi 2010
  • ایجاد یک پروژه
  • انتخاب یک پروژه
  • پروژه کنسولی که اخیراً ایجاد شده است
  • سایر فایل های ایجاد شده
  • Slutin ها و پروژه ها
  • افزودن یک پروژه دیگر به Slutin
  • تنظیم پروژه startup
  • کد برنامۀ ویندوزی
  • خواندن پروژه های Visual Studi 6
  • مرور کردن و کد نویسی یک پروژه
  • ویرایش گر پوشه ای
  • سایر پنجره ها
  • پنجره Design view
  • پنجره Prperties
  • پنجره Class view
  • پنجره bject brwser
  • پنجره Server Explrer
  • ساخت یک پروژه
  • ساخت (building ) ، کامپایل (Cmpiling) و ایجاد (making)
  • اشکال زدائی و عرضۀ build ها
  • بهینه سازی (ptimizatin)
  • نشانه های debugger (اشکال زدا)
  • دستورات اضافی اشکال زدائی سورس کد
  • انتخاب یک پیکر بندی
  • ویرایش یک پیکر بندی
  • Break pint ها
  • پنجره watch
  • Exceptin ها
  • عمل refactring

فرم ها و کنترلهای ویندوزی

 

 

 

 

  • ایجاد یک برنامه Windws frm
  • سلسه مراتب کلاس
  • کلاس cntrl
  • اندازه و مکان
  • شکل ظاهری(appearance)
  • تعامل با کاربر(user interactin)
  • عملکرد ویندوز(windws functinality)
  • کنترل ها و کامپوننت های استاندارد
  • کنترل buttn
  • کنترل CheckBx
  • کنترل RadiButtn
  • CheckedListBx و ListBx و CmbBx
  • DateTimePicker
  • ErrrPrvider
  • HelpPrvider
  • ImageList
  • Label
  • ListView
  • PictureBx
  • PrgressBar
  • MaskedTextBx و TextBx و RichTextBx
  • Panel
  • TableLayutPanelوFlwLayutPanel
  • SplitCntainer
  • TablePages وTableCnrl
  • TlStrip
  • MenuStrip
  • CntextMenuStrip
  • TlStripMenuItem
  • TlStripManager
  • TlStripCntainer
  • فرم ها
  • کلاس فرم
  • نمونه سازی و تخریب فرم
  • شکل ظاهری
  • Multiple Dcument Interface (MDI)
  • کنترل های سفارشی
  • صفات کنترل
  • کنترل سفارشی مبتنی بر TreeView
  • کنترل کاربر(UserCntrl)

AD.Net

  •  آشنایی با Cnnectin
  • آشنایی با Cmmand
  • آشنایی با DataAdapter
  • تراکنشها در  Ad.Net
  • آشنایی با  Dataset
  • آشنایی با  DataTable
  • آشنایی با DataView
  • پروسه Data-Binding در فرم های ویندوز
  • آشنایی با  BindingCntext

معرفی  XML و .NET

  • XML چیست؟
  • مزایای XML
  • برنامه های XML
  •  قوانین گرامر XML
  • Markup، حساس به Case است
  • یک dcument باید فقط یک عنصر ریشه ای داشته باشد
  • یک Start tag باید End Tag نیز داشته باشد
  • Tagهای Start و End باید بطور صحیحی nest شود
  • Valueهای Attribute باید در علامات نقل قول "" قرار گیرند
  • DTDها و Schemaهای XML
  •  Parse کردن اسناد XML
  • XSLT
  • XPath
  • .Net Framewrk
  • .Net و XML
  • اسمبلی ها و فضاهای نامی
  • مدل Parse کردن کلاسیک XML در .Net Framewrk
  • مدل Parse کردن LINQ محور در .Net Framewrk
  • فایل های پیکربندی .Net
  • AD.NET
  • کنترل های سرور ASP.NET
  • XML Serializatin
  • Remting
  • سرویس های وب
  • XML Dcumentatin
  • ویژگی های SQL Server XML
  •  کارکردن با Visual Studi
  • ایجاد برنامه های تحت ویندوز
  • ایجاد Libraryهای Class

دستکاری dcumentهای XML  با استفاده از مدل dcument bject

  • استفاده از DM Parser
  • کی از DM استفاده کنیم؟
  • یک نمونه از سندXML  
  • باز کردن یک سندXML موجود برای parse کردن
  • پیمایش در سندXML  
  •  جستجوی عناصر و ndeهای ویژه
  • بازیابی عناصر ویژه با استفاده از متد GetElementByTagName()
  • بازیابی عناصر ویژه با استفاده از متد GetElementByld()
  • انتخاب ndeهای ویژه با استفاده از متد SelectNdes()
  • انتخاب یک nde واحد ویژه با استفاده از متد SelectSingleNde()
  • اصلاح کردن سندهایXML  
  • پیمایش بین ndeهای مختلف
  • اصلاح کردن محتویات موجود
  • حذف کردن محتویات موجود
  • اضافه کردن محتویات جدید
  • استفاده از متدهای Helper
  • کارکردن با فضای سفید (White Space)
  • کارکردن با فضای نامی
  • درک رویدادهای کلاس XmlDcument

 خواندن و نوشتن dcumentهای XML

  • readerها و writerهای XML چه چیزی هستند؟
  • کی از readerها و writerها استفاده کنیم؟
  • کلاس های reader
  • کلاس XmlTextReader
  • کلاس XmlValidatinaReader
  • کلاس XmlNdeReader
  •  خواندن سندها با استفاده از XmlTextreader
  • باز کردن سندهای XML
  • خواندن Attribute، عناصر، و مقادیر
  • بهبود اجرا با استفاده از جداول نامی
  • کارکردن با فضاهای نامی
  • حرکت بین عناصر
  • متد ReadSubTree()
  • متد ReadTDescendant()
  • متد ReadTFllwing()
  • متد ReadTNextSibling()
  • متد Skip()
  • حرکت بین Attribute
  • خواندن محتویات
  • متد ReadinnerXml()
  • متد ReaduterXml()
  • متد ReadString()
  • نوشتن سندهای XML
  • Exprt کردن ستون ها به صورت عنصر
  • Exprt کردن ستون ها به صورت Attribute
  • تعیین رمزگذاری کاراکتر
  • فرمت کردن utput
  • ساپورت فضای نامی
  • کارکردن با داده هایNntextual
  • Serialize کردن داده ها
  • Unserialize کردن داده ها

 دسترسی به dcumentهای XML با استفاده از مدل Xpath Data

  • مروی بر XPath
  • موقعیت Path
  • Axis
  • تستهای Nde
  • اسناد
  • عملکردهای Xpath
  • مدل Xpath Data
  • ایجاد XpathNavigatr
  • پیمایش در سند XML با استفاده از XPathNavigatr
  • انتخاب کردنnodeها
  • پیمایش بین Attribute
  • بازیابی XML درونی و بیرونی
  • به دست آوردن یک XmlReader از XPathNavigatr
  • به دست آوردن یک XmlWriter از XPathNavigatr
  • ویرایش سندهای XML با استفاده از کلاس XPathNavigatr