C Sharp

Из Википедије, слободне енциклопедије
(преусмерено са C Sharp (programming language))
Иди на навигацију Иди на претрагу

C#[1] (енглески: C sharp, изговор: /sē shärp/), повишено це или цис, један је од млађих програмских језика. Настао је 2000. године као саставни део Мајкрософтовог развојног окружења .NET Framework 1.0. На челу тима који се бавио развојем C#-а био је Андерс Хејлсберг. C# подржава више парадигми (објектно оријентисану, императивну, декларативну, генеричку) као и већина модерних виших програмских језика (C++, Java итд). Језик је опште примене и намењен је изради апликација за .NET Framework платформу.

C#
C#

Историјат[уреди]

Јануара 1999. године, Андерс Хејлсберг основао је тим за израду новог програмског језика који се у почетку звао Кул (eng. "C-like Object Oriented Language"), идејно замишљен као програмски језик C, али објектно оријентисан.[2] Мајкрософт је хтео да сачува првобитно име, али је због заштитног знака одустао.

У јулу 2000. године окружење .NET представљено је на Конференцији професионалних програмера (eng. Professional Developers Conference), језик је преименован у C#, а библиотеке и ASP.NET пренесене у C#. C# представља наследника C и C++ језика, добио је име шарп, инспирисано музичком нотацијом и значи да се написана нота изводи за пола корака више. Фајлови писани у овом језику имају екстензију .cs.

Хејлсберг је главни дизајнер C#-а у Мајкрософту, а раније је радио и на дизајну Турбо Паскала, Делфија и Visual J++. У многим интервјуима и техничким документима он је навео[тражи се извор] да су управо недостаци других програмских језика (нпр. C++, Java, Delphi и Smalltalk) довели до стварања C#.

Џејмс Гослинг, који је 1994. креирао програмски језик Java, и Били Џој, суоснивач Сан-Мајкросистемса (енгл. Sun Mycrosistems) назвали су C# имитацијом Јаве. Тачније, Џејмс Гослинг је изјавио како је C# као Јава којој су искључене сигурност, продуктивност и безбедност. [3][4] Клаус Крефт и Ангелика Лангер (аутори књига о C++-y) навели су у свом блогу да су "Јава и C# готово идентични програмски језици. Досадно понављање без иновација."[5] "Тешко да ће неко тврдити да су Јава и C# језици који су променили начин на који пишемо програме", као и да је "C# много тога позајмио од Јаве и обрнуто. Сада када C# подржава боксинг и анбоксинг, имамо особине веома сличне Јави." [6] У јулу 2000. Хејлсберг је рекао да C# није "Јавин клон" и да је по дизајну ближи C++. [7]


Од издања C# 2.0 у новембру 2005 , језици C# и Јава почињу да се развијају у различитим правцима, а сличности је све мање. Једна од битних разлика јесте додавање генерика у оба језика са веома различитом имплементацијом. C# користи генеричке објекте прве класе (енгл. first-class) који се могу користити као и свака друга класа. [8] Осим тога, C# је додао неколико главних карактеристика по којима би се у великој мери одвајао од других програмских језика и приближио функционалном стилу. Значајне карактеристике су: подржавање ламбда израза, методе проширења и анонимни типови. Ове карактеристике омогућавају C# програмерима да користе технике функционалног програмирања и примењују их кад год је то могуће. Линк (енгл. LINQ) екстензије и функционални увоз (eng. functional import) омогућују програмеру да пише мање кода који се често понавља и користи (нпр. код база података, раздвајање XML) фајла, претраживање података итд. стављајући акценат на програмерску логику како би се побољшала читљивост и одрживост.[9]
C# је имао и своју маскоту која се звала Енди(енгл. Andy) (по Андерсу Хејлсбергу). Пензионисана је у јануару 2004. године.

Верзије[уреди]

Верзија C# 1.0[уреди]

Најављена је 2000. године, а премијерно је приказана 2002. године од стране компаније Мајкрософт. Био је први програмски језик прилагођен за .NET Framework окружење.

Верзија C# 2.0[уреди]

У јулу 2003. Мајкрософт је представио спецификацију за C# 2.0 за почетак 2004. године. Ова верзија садржи неке нове могућности програмског језика, од којих је назначајније да су генерици сада параметризовани типови, много више као што су то били C++ шаблони. Они се имплементирају генерисањем по типу независног бајткода у времену превођења (компајлирања), а када се у времену извршења (енглески: run-time) шаблон први пут инстанцира за конкретан тип, тада се генерише бајткод зависан од типа. Та могућност даје високо-перформансне и много више типизиране генерике који не захтевају много изворног кода.

Верзија C# 3.0[уреди]

Визуелни Студио је 2008. добио C# верзију 3.0 која је поседовала много нових функција. То је олакшало програмерима у прављењу својих апликација. Иновације у верзији 3.0:

Верзија C# 4.0[уреди]

Први пут представљена у априлу 2010. године. Иновације у верзији 4.0:

  • Касно спајање
  • Опцони параметри

Верзија C# 5.0[уреди]

Представљена у августу 2012. године. Главне новине су:

  • Асинхрони чланови
  • Атрибути инфо позиваоца

Верзија C# 6.0[уреди]

Представљена у јулу 2015. године. Иновације у верзији 6.0:

  • Статички увоз
  • Филтери изузетака
  • Име оператора

Верзија C# 7.0[уреди]

Представљена у марту 2017. године. Новине:

  • Излазне варијабле
  • Торке и деконструкција
  • Подударање узорака
  • Локалне функције
Верзија C# 7.1[уреди]

Представљена у августу 2017. године.

Пример изворног кода[уреди]

Овај пример извршава се на конзоли.

using System;

namespace HelloNameSpace
{
  public class HelloWorld
  {
   static void Main()
   {
     Console.WriteLine("Zdravo, svete!");
   }
  }
}

Писање програма[уреди]

Типови података[уреди]

Сваки програмски језик има елементе који га карактеришу и то су :

  • азбука
  • резервисане речи
  • константе
  • променљиве

Азбуку програмског језика C# чине мала и велика слова енглеског алфабета, цифре, специјални знаци(нпр. за аритметичке операције, релације, итд.) и разделници(тачка, двотачка, тачка зарез ,итд.).

Програмски језик C# спада у групу типизираних језика. Свака променљива мора да се декларише пре употребе. Декларацијом променљиве дефинише се : назив, тип, опционо њена почетна вредност и видљивост тј. права приступа(ако је променљива чланица неке класе).У оквиру једне линије кода може се декларисати једна или пак, више променљивих. Свака променљива као карактеристику има :

  • име
  • тип

Име променљиве је низ алфанумеричких карактера при чему први знак не може бити цифра. Специјални знаци не могу бити део имена осим знака _ (доња црта) који може бити и први знак. Могу се користити мала и велика слова при чему се прави разлика између малих и великих слова. Тип одређује: скуп вредности, начин представљања у меморији рачунара и скуп оператора који се могу примењивати. Пример Један од целобројних типова је тип бајт(eng. byte).Скуп вредности који може имати један податак типа бајт је скуп целих бројева у опсегу од -128 до 127.За меморисање једног податка типа бајт потребно је 8 бита. За меморисање једног податка типа инт(eng. int) потребно је 4 бајта ,односно 32 бита. Операције које су дозвољене над подацима типа инт су аритметичке операције(сабирање, одузимање, множење и дељење).

Типови података се могу поделити на две велике групе:

  • Вредносни типови:
    • Структуре
      • Нумерички типови података представљају целе бројеве.
        • Интегралне(целе)
          • sbyte
          • byte
          • char
          • short
          • ushort
          • int
          • uint
          • long
          • ulong
        • Типови са покретним зарезом представљају реалне бројеве.
          • float
          • double
        • Децималне
          • decimal
      • Логички типови имају само две вредности:логичка истина тј.тачно и логичка неистина тј.нетачно.
        • bool
      • Кориснички дефинисани типови
    • Енумератори
  • Референтни типови:
    • class
    • interface
    • delegate
    • object
    • string[10]

Оператори[уреди]

Типом података је између осталог одређен и скуп оператора који могу да се користе над подацима датог типа. Оператори се могу класификовати по више критеријума. Најчешће се користи класификација на основу броја операнада и класификација у односу на врсту израза у којима се користе. По првој класификацији оператори могу бити :

Унарни оператори су оператори који имају само један операнд. Такав је на пример оператор негације.

Бинарни оператори се примењују над два операнда и они су најчешћи. Пример бинарних оператора су оператори за сабирање ,одузимање ,множење итд.

Тернарни оператор има три операнда и у програмском језику C# постоји само један такав оператор(тај оператор је оператор „?:” који ће накнадно бити описан).

По другој класификацији оператори се могу поделити на:

  • аритметичке(нумеричке),
  • логичке,
  • релацијске,
  • операторе за рад са текстуалним подацима.

Синтаксно исправна комбинација операнада и оператора представља један израз. Израз (тј. тачније речено вредност израза)такође има свој тип који може да буде један од стандардних типова(целобројни, реални, логички,...). Пример израза: alfa - 3 * pom + beta

Ако се у једном изразу појави више оператора поставља се питање којим редоследом ће они бити примењивани тј. извршавани. Сваки оператор има свој приоритет. Редослед примене оператора зависи од приоритета оператора који се срећу у једном изразу. Ако имамо више оператора истог приоритета онда се у неким случајевима они примењују с лева у десно тј. онако како се појављују у изразу. Поред познавања начина функционисања оператора треба знати и приоритет оператора и редослед извршавања ако се јави више њих узастопно.

Ако експлицитно желимо одговарајући редослед извршавања оператора онда користимо заграде. У општем случају се најпре примењују они оператори који се налазе у заградама. Ако имамо случај угњеждених заграда онда се најпре примењују најдубље заграде.

Аритметички оператори су :

  • +(сабирање)
  • -(одузимање)
  • *(множење)
  • /(дељење)
  •  %(остатак целобројног дељења -модуо)

Логички оператори су:

  •  ! -негација
  • ||-логичко "или"
  • &&-логичко "и"

Релацијски оператори су:

  • == -еквиваленција тј. једнакост
  •  != -нееквиваленција тј. различито
  • < -мање
  • > -веће
  • <= -мање или једнако
  • >= - веће или једнако

Оператори за рад са битовима су:

  • ~ -негација на нивоу бита
  • & -И на нивоу бита
  • | -Или на нивоу бита
  • ^ -ексклузивно или на нивоу бита
  • <<-померање у лево
  • >>-померање у десно

Текстуални оператор је конкатенација у ознаци + и представља надовезивање другог операнда на први операнд. Поред претходно наведених оператора који се најчешће користе постоје и други оператори као што су оператори доделе, оператори за инкрементирање ,оператори за декрементирање ,тернарни оператор итд.

Основни оператор доделе је =.У општем случају оператор доделе се користи на следећи начин: променљива=израз Најпре се израчунава израз а затим се израчуната вредност израза додељује променљивој при чему типови израза и променљиве морају да се сложе.

Поред основног оператора доделе постоје и сложени облици оператора доделе који имају општи облик оператор= где је оператор било који аритметички оператор.

Пример: a += b; је исто што и a = a + b;

Оператори инкрементирања у ознаци ++ и декрементирања у ознаци -- могу бити префиксни и постфиксни. Оператор инкрементирања повећава вредност операнда за један а оператор декрементирања смањује вредност операнда за један и то без обзира да ли су префиксни или постфиксни. Разлика се уочава једино када су ови оператори део неког сложенијег израза. У том случају се оператори инкрементирања и декрементирања ,ако су у префиксном облику извршавају пре рачунања вредности израза ,за разлику од случаја када се јављају у постфиксном облику када се извршавају тек након израчунатог израза.Једноставно речено ако се у неком изразу оператори инкрементирања и декрементирања јављају у префиксном облику вредност израза се израчунава са новим вредностима операнада над којим се примењују ови оператори односно у случају постфиксних оператора израз се рачуна са старим вредностима операнада.

Приоритет оператора[уреди]

Сви оператори имају свој приоритет. Компајлер извршава неки израз у коме постоји више оператора у редоследу који се одређује на основу приоритета оператора и места њиховог појављивања у изразу. Неки оператори имају исти приоритет тј.сви оператори се могу сврстати у категорије. Приоритет ових категорија је следећи(од највишег ка најнижем):

  • основни оператори(приступ пољу, позив методе, приступ индексу, постинкрементирање, постдекрементирање,"new","typeof","sizeof")
  • унарни оператори
  • аритметички(множење, дељење, остатак при дељењу)
  • сабирање и одузимање
  • померање на нивоу бита(померање у лево и померање у десно)
  • релациони оператори
  • једнакост(једнако или различито)
  • И на нивоу бита
  • ексклузивно ИЛИ на нивоу бита
  • ИЛИ на нивоу бита
  • логичко И
  • логичко ИЛИ
  • тернарни оператор
  • оператор додељивања

Разлика између C# и C++[уреди]

Код у језику C# је мало разумљивији од кода C++. Језик C# је сигурнији по питању доделе типа променљивим. То значи да уколико некој променљивој или неком податку доделимо одређени тип, он не може бити замењен другим типом. Постоје строга правила којих се морамо придржавати приликом конверзија типова, што у суштини значи да ћемо морати да напишемо више кода у C# него у C++-у да бисмо извршили исте задатке. Код је робуснији и једноставније је отклонити грешке, односно .NET у сваком тренутку може одредити ком типу припада тражени податак.

Услед тога језик C# не омогућује наредбе као што су "узми део меморије почевши од 4. бајта унутар податка и дужине 10 бајтова и интерпретирај га као X ", што не мора увек да буде лоше.

За разлику од C++, C# не подржава вишеструко наслеђивање, иако класа може имплементирати више интерфејса.[11]

Особине језика[уреди]

Битно је напоменути да C# програмски језик синтаксно није сложен (има око 80 резервисаних речи), али је врло изражајан у делу где је потребно решити било какав проблем софтверског девелопмент процеса. Поред могућности које се тичу саме имплементације програмских језика, битно је напоменути да C# подржава и следеће:

  • Директан приступ меморији помоћу показивача у стилу C++-а
  • Резервисане речи за издвајање несигурних операција
  • Упозораваче скупљача смећа окружења ЦЛР(CLR) да не уништава објекте на које показују показивачи док се ти објекти не ослободе, итд.

Портабилност[уреди]

C# по дизајну најбоље осликава ЦЛИ (енг. Common Language Infrastructure).Спецификације језика не захтевају генерисање ЦИЛ(енг. Common Intermediate Language) или било ког другог специфичног формата, већ се може компајлирати као и традиционални програмски језици C++,Фортран и други.

Методе[уреди]

Као C++,за разлику од Јаве,C# програмери морају да користе кључну реч virtual како би из подкласе променили наслеђени метод.

Методе проширења дозвољавају програмерима да користе статичке методе омогућавајући програмерима да додају методе објекту.

Не постоје глобалне променљиве нити методе. Све променљиве и функције морају бити декларисане унутар класа.

Приступ меморији[уреди]

Показивачи се могу користити само у блоковима означеним са unsafe и потребна је посебна дозвола за покретање. Већини објеката се приступа путем сигурних референци који увек показују на постојеће објекте или имају јасно дефинисану нулту вредност(енг. null), немогуће је добити референцу на непостојећи објекат или на случајни блок меморије. Меморија се не ослобађа експлицитно већ то ради скупљач отпадака(енг.Garbage Collector).

Изузеци[уреди]

Изузеци у C# не постоје, за разлику од Јаве. Ово је била свесна одлука заснована на проблемима скалабилности и веродостојности.

Полиморфизам[уреди]

Објектно оријентисана парадигма уводи појам наслеђивања, тј. извођења која представља могућност да се једна класа дефинише на основу неке друге класе при чему ће та нова класа да има све особине које има и постојећа класа, неке особине ће бити промењене а неке нове ће бити додате. То конкретно значи да не морамо да преписујемо постојећу класу (познати "копи-пејст"(eng. copy-paste) приступ који се често користи у процедуралном програмирању и представља извор многих грешака) већ само да наведемо од које класе полазимо тј.која је основна или родитељска класа и да модификујемо или додамо неке чланице класе.

Не постоји вишеструко наслеђивање, тј. класа може бити потомак само једне класе.

Ову одлуку донео је главни дизајнер језика како би се избегле компликације и поједноставили архитектонски захтеви током ЦЛИ-ја(енг. Common Language Infrastructure). За разлику од Јаве, C# подржава преоптерећење оператера.

Boxing i unboxing[уреди]

Boxing је операција имплицитног конвертовања променљиве у одговарајући објекат.

Unboxing је операција експлицитног конвертовања објекта у вредносни тип.

Енкапсулација[уреди]

Енкапсулација, енкапсулирање што у преводу значи замотавање је начин да ви сакријете, заштитите и контролишете приступ подацима који се налазе у објекту. То радите тако што члановима класе одредите ранг видљивости, тј. одредите који су чланови класе, на пример, јавни, приватни, заштићени или интерни.

Због енкапсулације постоје методе get и set преко којих приступамо атрибутима класа.

Остало[уреди]

  • Постоје разне конверзије (имплицитне и експлицитне) између различитих типова података (32-битни у 64-битне бројеве, int у float или string...).
  • Језик је Case sensitive, разликује мала и велика слова.

Какве апликације можемо писати у C#-у?[уреди]

Језик C# нема ограничења у погледу тога какве све апликације можемо направити. C# користи окружење и самим тим нема ограничења у вези са могућим апликацијама. Најчешћи типови прављених апликација:

  • Виндовс апликације - То су рецимо, апликације типа Мајкрософт Офис (eng. Microsoft Office) које имају изглед Виндовса и одлично с слажу са њим. Ово је упрошћено коришћењем модула Виндовс формулара унутар .НЕТ окружења, који у ствари чини библиотека контрола (као што су дугмад, палете алатки, менија итд.) које нам користи при изради Виндовс корисничког интерфејса.
  • Веб апликације- Веб стране које можемо видети кроз било који читач. .НЕТ окружење пружа веома моћан систем генерисања Веб садржаја и то динамички, дозвољавајући персонализацију, сигурност и још много тога.
  • Веб сервиси - представљају нов и узбудљив начин израде разноврсних дистрибуираних апликација. Користећи Веб сервисе преко Интернета можемо размењивати било коју врсту података, користећи просту синтаксу, не водећи рачуна о томе у ком јеѕику је написана апликација нити на ком систему је постављена.[12]

Кључне речи[уреди]

Кључне речи C# (верзија 2.0) су: abstract, as, base, bool, break, byte, case, catch, char, checked, class, const, continue, decimal, default, delegate, do, double, else, enum, event, explicit, extern, false, finally, fixed, float, for, foreach, goto, if, implicit, in, int, interface, internal, is, lock, long, namespace, new, null, object, operator, out, override, params, private, protected, public, readonly, ref, return, sbyte, sealed, short, sizeof, stackalloc, static, string, struct, switch, this, throw, true, try, typeof, uint, ulong, unchecked, unsafe, ushort, using, virtual, volatile, void и while.[13]

Референце[уреди]

  1. ^ Чита се си шарп.
  2. ^ Hamilton, Naomi (1. 10. 2008). „The A-Z of Programming Languages: C#”. Computerworld. Приступљено 1. 10. 2017. 
  3. ^ Wylie Wong (2002). „Why Microsoft's C# isn't”. CNET: CBS Interactive. Приступљено 19. 10. 2017. 
  4. ^ Joy, Bill (7. 2. 2002). „Microsoft's blind spot”. cnet.com. Приступљено 12. 01. 2010. 
  5. ^ Klaus Kreft and Angelika Langer (2003). „After Java and C# - what is next?”. Приступљено 29. 6. 2017. 
  6. ^ Klaus Kreft and Angelika Langer (3. 7. 2003). „After Java and C# - what is next?”. artima.com. Приступљено 12. 10. 2017. 
  7. ^ Osborn, John (1. 8. 2000). „Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg”. O'Reilly Media. Приступљено 29. 11. 2017 
  8. ^ „Generics (C# Programming Guide)”. Microsoft. Приступљено 21. 03. 2011. 
  9. ^ Mercer, Ian (15. 4. 2010). „Why functional programming and LINQ is often better than procedural code”. abodit.com. Приступљено 27. 10. 2017. 
  10. ^ Типови података језика C# — са сајта Мајкрософта
  11. ^ Karli Watson (2002). „Od pocetka..C#” (PDF). CET Computer Equipment and Trade. Приступљено 28. 11. 2017. 
  12. ^ Karli Watson (2002). „Od pocetka..C#” (PDF). CET Computer Equipment and Trade. Приступљено 28. 11. 2017. 
  13. ^ Кључне речи језика C# — са сајта Мајкрософта

Види још[уреди]

Спољашње везе[уреди]