Eclipse TUES 1 Кирил TUES

Размер: px
Започни от страница:

Download "Eclipse TUES 1 Кирил TUES"

Препис

1 Eclipse TUES 1

2 Същност SWT предоставя много възможности за развитие на потребителския интерфейс. Неудобството се изразява в това, че при представяне на данните се използват прости типове като низове, числа, картинки. Това е неудобно при работа с обектно ориентиран език като Java. 2

3 Проблем Трябва да покажете полето name на всеки обект Person 3

4 Проблем Извличате стойността на полето name и я поставяте в списъка name 4

5 Проблем Не може ли някой друг да свърши тази работа! name 5

6 Решение Проблемът може да се реши чрез иползването на JFace JFace 6

7 Същност Представянето на обектите се улеснява значително с използването на JFace JFace представлява библиотека улесняваща извършването на често срещани задачи при разработката на потребителски интерфейс. JFace работи със SWT без да се опитва да го замести. 7

8 Същност Интересна характеристика на JFace e наличието на така наречените viewers. Viewer-ите са обекти адаптиращи обектно-ориентирания модел към потребителския интерфейс. Целта е да се улесни изграждането на често срещани графични компоненти като структурирани списъци, таблици, дървета. Пример за viewer може да бъде видян на фигурата. 8

9 Същност Всичко, което вижда потребителят представлява SWT компоненти. JFace помага за полесната организация на информацията 9

10 Същност JFace viewer-ите позволяват директната работа със сложни обекти без да се налага на програмиста да представя тези обекти като съвкупност от низови и числа. Това се извършва автоматично. За да се отдели потребителският интерфейс от бизнес логиката на приложението се въвеждат няколко допълнителни класа. 10

11 Същност За да съществува обектът viewer трябва да са зададени съответните допълнителни класове Задължителни ContentProvider, LabelProvider Незадължителни - ViewerFilter, ViewerComparator Пример: Даден е масив от цели числа. (inputobject) Искаме да изобразим елементите на масива във viewer структуриран като списък. За целта ще използваме ListViewer. (ContentProvider) Трябва да се покажат само четните числа (ViewerFilter) Числата трябва да са сортирани в низходящ ред (ViewerComparator) Числата трябва да са показани в двоичен код (LabelProvider) 11

12 Пример 12

13 ContentProvider Всеки Viewer се нуждае от съдържаниe, което да покаже. Това съдържание се извлича от модела. Извличането става с помоща на специален обект от тип org.eclipse.jface.viewers.icontentprovider или неговите най-често използвани наследници org.eclipse.jface.viewers.istucturedcontentprovider org.eclipse.jface.viewers.itreecontentprovider public interface IStructuredContentProvider extends IContentProvider { public Object[] getelements(object inputelement); Методът getelements() връща масив от обекти, извлечени от входния елемен inputelement. 13

14 ContentProvider public interface ITreeContentProvider extends IStructuredContentProvider { public Object[] getchildren(object parentelement); public Object getparent(object element); public boolean haschildren(object element); getchildren() - резултатът от метода е масив от елементи. Тези елементи ще бъдат изобразени като деца на parentelement. getparent() - в повечето случаи смислената му имплементация не е необходима. Целта е като резултат да се върне родителят на посочения елемент. haschildren() - при работа с ITtreeContentProvider първо се вика haschildren() и ако резултатът е true се вика getchildren() 14

15 ContentProvider Съгласно примера входният елемен е масив с цели числа. Числата ще бъдат представени като обекти от тип Integer. public class NumbersContentProvider implements IStructuredContentProvider { public Object[] getelements(object inputelement) { if (inputelement instanceof int[]) { int[] array = (int[]) inputelement; Integer[] result = new Integer[array.length]; for (int i = 0; i < array.length; i++) { result[i] = new Integer(array[i]); return result; return null; ; Задаването на ContentProvider става по следния начин. final StructuredViewer viewer = new TreeViewer(shell, SWT.SINGLE); viewer.setcontentprovider(new NumbersContentProvider()); 15

16 ViewerFilter Съдържанието на viewer-а е определено с помощта на ContentProvider-а. Следва филтриране на съдържанието. Всеки viewer може да има един или няколко филтъра. Филтърът представлява обект от тип org.eclipse.jface.viewers.viewerfilter. Добавянето на филтър към viewer става с помощта на метода StructuredViewer.addFilter(). public abstract class ViewerFilter { /* code missed */ public abstract boolean select(viewer viewer, Object parentelement, Object element); 16

17 ViewerFilter Основният метод е select(). Методът връща true ако даденият елемент минава през филтъра т.е не се филтрира. Логиката на филтрация е отново напълно произволна и зависи само от програмиста. Съгласно разработвания пример трябва да се показват само елементите, които са четни. public class NumbersFilter extends ViewerFilter public boolean select(viewer viewer, Object parentelement, Object element) { if (element instanceof Integer) { int value = ((Integer) element).intvalue(); if (value % 2 == 0) return true; return false; 17

18 ViewerFilter Добавянето на филтър става по следния начин: final StructuredViewer viewer = new ListViewer(shell, SWT.SINGLE); viewer.addfilter(new NumbersFilter()); 18 final StructuredViewer viewer = new ListViewer(shell, SWT.SINGLE); viewer.addfilter(new public boolean select(viewer viewer, Object parentelement, Object element) { if (element instanceof Integer) { int value = ((Integer) element).intvalue(); if (value % 2 == 0) return true; return false; );

19 ViewerComparator С помощта на ContentProvider-а е определено съдържанието. Следва стъпка на сортиране. Ако използвания viewer го позволява е възможно задаването на определен алгоритъм на сортиране на елементите. Сортирането се извършва с помощта на обект от тип org.eclipse.jface.viewers.viewercomparator. public class ViewerComparator { /*... */ public int category(object element) { return 0; public int compare(viewer viewer, Object e1, Object e2) { /*... */ 19

20 ViewerComparator По подразбиране алгоритъмът на сортиране се извършва на две стъпки: Първо елементите се групират по категории и ранк от 0 до n чрез public int category(object element) { return 0; След това се извършва сортиране на елементите в категорията посредством текстовата презентация на обектите т.е сортират се в азбучен ред. 20

21 ViewerComparator Съгласно използвания пример числата трябва да са сортирани в низходящ ред. public class NumbersComparator extends ViewerComparator public int compare(viewer viewer, Object e1, Object e2) { if ((e1 instanceof Integer) && (e2 instanceof Integer)) { return ((Integer) e2).compareto((integer) e1); throw new IllegalArgumentException("The comparator compares only Integers"); Задаване на обект от тип ViewerComparator final StructuredViewer viewer = new ListViewer(shell, SWT.SINGLE); viewer.setcomparator(new NumbersComparator()); 21

22 LabelProvider Съдържанието на viewer-а е определено. Елементите са филтрирани и сортирани, но все още не са показани на потребителя. JFace viewer-ите използват SWT компоненти за представяне на информацията. Следователно трябва да се извърши преобразуване на елементите от съдържанието към елементи от тип String, Image и т.н. Това преобразуване се извършва с помощта на обект от тип org.eclipse.jface.viewers.ilabelprovider. public interface ILabelProvider extends IBaseLabelProvider { public Image getimage(object element); public String gettext(object element); Интерфейсът има два основни метода getimage() и gettext(). Резултатът върнат от тези методи ще бъде показан на потребителя. 22

23 LabelProvider Важно!!!. Не всички входни елементи трябва да се поддържат. Необходимо е еднотипно решение. public String gettext(object element) { if (element instanceof java.util.arraylist) { return "java.util.arraylist"; else if (element instanceof java.util.linkedlist) { return "java.util.linkedlist"; thrown new IllegalArgumentException(); /* A solution is to throw an * IllegalArgumentException() * */ 23

24 LabelProvider Съгласно примера трябва да се показват двоичните кодове на съответните числа. public class NumbersLabelProvider extends LabelProvider public String gettext(object element) { if (element instanceof Integer) { int value = ((Integer) element).intvalue(); return Integer.toBinaryString(value); throw new IllegalArgumentException("This label provider supports only Integers"); Пример за задаване на LabelProvider. final StructuredViewer viewer = new TreeViewer(shell, SWT.SINGLE); viewer.setlabelprovider(new NumberLabelProvider()); 24

25 ListViewer int[] input = new int[] { 100, 121, 144, 169, 196 ; final StructuredViewer viewer = new ListViewer(shell, SWT.SINGLE); viewer.setcontentprovider(new NumbersContentProvider()); viewer.setlabelprovider(new NumbersLabelProvider()); viewer.addfilter(new NumbersFilter()); viewer.setcomparator(new NumbersComparator()); viewer.setinput(input); 25

26 TableViewer TableViewer Предоставя изглед на таблица за съответното съдържание. Необходими са contentprovider, labelprovider и определен набор от колони, в които да се показва информацията. Пример: Представяне на число в двоичен, десетичен и шестнадесетичен вид. Целта е максимално лесно да адаптираме предходния пример към новите изисквания. 26

27 TableViewer За да работи един TableViewer правилно е необходимо да са посочени неговите колони и техните имена. Инициализацията се извършва по следния начин. 1 final TableViewer viewer = new TableViewer(shell, SWT.SINGLE); 2 viewer.gettable().setheadervisible(true); 3 viewer.gettable().setlinesvisible(true); 4 String[] columnnames = new String[] { "Binary", "Dec", "Hex" ; 5 int[] columnalignments = new int[] { SWT.LEFT, SWT.CENTER, SWT.RIGHT ; 6 for (int i = 0; i < columnnames.length; i++) { 7 TableColumn tablecolumn = new 8 TableColumn(viewer.getTable(), columnalignments[i]); 9 tablecolumn.settext(columnnames[i]); 10 tablecolumn.setwidth(100); 11 27

28 TableViewer 2 viewer.gettable().setheadervisible(true); 3 viewer.gettable().setlinesvisible(true); 4 String[] columnnames = new String[] { "Binary", "Dec", "Hex" ; 5 int[] columnalignments = new int[] { SWT.LEFT, SWT.CENTER, SWT.RIGHT ; Ред 2: Имената на колоните ще са видими. Ред 3: Редовете на таблицата ще са оцветени във сиво през ред. Ред 4: Създаване на масив използван за задаване имената на колоните. Ред 5: Масив определящ подравняването във всяка колона. 28

29 TableViewer 6 for (int i = 0; i < columnnames.length; i++) { 7 TableColumn tablecolumn = new TableColumn(viewer.getTable(), columnalignments[i]); 8 tablecolumn.settext(columnnames[i]); 9 tablecolumn.setwidth(100); 10 Ред 7: Създаване на нов обект от тип TableColumn. Колоните в таблицата представляват деца на таблицата. Ред 8: Задаване името на колоната. Ред 9: Задаване широчината на колоната. 29

30 TableViewer В този момент приложението изглежда следния начин: 30

31 TableViewer Съгласно предходния пример класовете, които няма да променяме са NumbersContentProvider съдържанието, което искаме да показваме е същото масив от числа NumbersFilter искаме на филтрираме числата по същият признак т.е по четност NumbersComparator числата отново трябва да са сортирани по низходящ ред. Тъй като viewer-ът в момента разполага с няколко колони е необходимо да се зададе текст за всяка една от клетките. Следователно промяната трябва да се извърши в NumbersLabelProvider класа. NumbersLabelProvider трябва да имплементира интерфейса org.eclipse.jface.viewers.itablelabelprovider 31

32 TableViewer public class NumbersLabelProvider extends LabelProvider implements ITableLabelProvider { public String getcolumntext(object element, int columnindex) { if (!(element instanceof Integer)) { throw new IllegalArgumentException("This is a label provider only for Integers"); int value = ((Integer) element).intvalue(); switch (columnindex) { case 0:return Integer.toBinaryString(value); case 1:return Integer.toString(value); case 2:return Integer.toHexString(value); return null; Методът getcolumntext() връща резултат спрямо колоната определена с columnindex 32

33 TableViewer Резултатът от реализацията на примера е показа на фигурата. 33

34 TreeViewer Предоставя възможност за изобразяване на дървовидна структура. Необходими са contentprovider, labelprovider, входни данни. Целта на примера е да модифицираме ListViewer-а, така че като деца на всяко число да се показват резултатът от разделянето му на десет. Класовете които няма да се променят са: NumbersLabelProvider NumbersComparator NumbersFilter Промяната се извършва единствено в NumbersContentProvider. Тъй като предоставяното съдържание трябва да е в дървовидна структура то NumbersContentProvider трябва да имплементира org.eclipse.jface.viewers.itreecontentprovider 34

35 TreeViewer public class NumbersContentProvider implements ITreeContentProvider { public Object[] getelements(object inputelement) { return getchildren(inputelement); public void dispose() { public void inputchanged(viewer viewer, Object oldinput, Object newinput) { public Object[] getchildren(object parentelement) { /*explained later*/ public Object getparent(object element) { return null; public boolean haschildren(object element) { return getchildren(element).length > 0; 35

36 TreeViewer public Object[] getelements(object inputelement) { return getchildren(inputelement); public void dispose() { public void inputchanged(viewer viewer, Object oldinput, Object newinput) { public boolean haschildren(object element) { return getchildren(element).length > 0; Методите dispose() и inputchanged() са с празна имплементация. Тя в случая не е необходима. Медодът getelements() просто пренасочва своето изпълнение към getchildren(). Пренасочването се извършва за пълнота, защото ITreeContentProvider е наследник на IStructuredContentProvider, а IStructuredContentProvider има метод getelements(). 36

37 TreeViewer 1 public Object[] getchildren(object parentelement) { 2 if (parentelement instanceof int[]) { 4 int[] array = (int[]) parentelement; 5 Integer[] result = new Integer[array.length]; 6 for (int i = 0; i < array.length; i++) { 7 result[i] = new Integer(array[i]); 8 9 return result; 10 else if (parentelement instanceof Integer) { 11 int value = ((Integer) 12 parentelement).intvalue(); 13 if (value > 10) return new Integer[] { new Integer( value / 10) ; return new Object[0];//must not return null or //haschildren() will fail Ред 10-14: Ако обектът е от тип Integer то се връща масив от един елемент. Този елемент е отново обект от тип Integer, но стойността е вече разделена на десет. 37

38 TreeViewer Резултатът от изпълнението на програмата е показан на фиг.1. За улеснение на фиг.2 е показан същият резултат, но с десетични числа. Фиг.1 Фиг.2 38

39 TableViewer - Редактиране Редактиране на таблица Задачата на този пример е да се изгради TableViewer, който да позволява редактиране на елементите показвани в неговите клетки. Възможно е въвеждането само на цели числа. Позволява се редакция само на средната колона т.е на тази с десетичните числа. За целта ще се използва досега разработения TableViewer. С цел премахване на излишната сложност следните класове няма да бъдат използвани: NumbersComparator NumbersFilter 39

40 TableViewer - Редактиране Крайният резултат от редактирането ще изглежда по следният начин 40

41 TableViewer - Редактиране Капсулираме необходимите обекти в нов клас - TableEditor 1 public class TableEditor { 2 private TableViewer ftableviewer; 3 private int[] finput = new int[] { 100, 121, 144, 169,196, 1024 ; 4 private static String[] COLUMN_NAMES = new String[] { "Binary", "Dec", "Hex" ;; 5 public static void main(string[] args) { 6 TableEditor editor = new TableEditor(); 7 editor.createcomposite(); 8 /*... code missed...*/ Ред 2: Обектът от тип TableViewer. Ред 3: Входните данни за viewer-а. 41 Ред 4: Имената на колоните на таблицата

42 TableViewer - Редактиране Методът TableEditor.createComposite() изглежда по следният начин: public void createcomposite() { /*... code missed - creating shell */ Group group = new Group(shell, SWT.NONE); group.settext("tableeditor example"); group.setlayout(new GridLayout(1, false)); group.setlayoutdata(new GridData(GridData.FILL_BOTH)); ftableviewer = createtableviewer(group); addcolumns(ftableviewer); createviewereditors(); ftableviewer.setinput(finput); /*...code missed opening shell */ Основната идея на този метод е да инициализира ftableviewer, добави колоните и създаде обектите необходиме за редактиране съдържанието на таблицата. Ще бъда разгледани всичките методи. 42

43 TableViewer - Редактиране 1 protected TableViewer createtableviewer(composite 2 parent) { 3 TableViewer viewer = new TableViewer(parent, SWT.BORDER SWT.SINGLE); 5 viewer.setcontentprovider(new NumbersContentProvider()); 6 viewer.setlabelprovider(new NumbersTableLabelProvider()); 7 GridData data = new GridData(); 8 data.horizontalalignment = GridData.FILL; 9 data.verticalalignment = GridData.FILL; 10 data.grabexcesshorizontalspace = true; 11 data.grabexcessverticalspace = true; 12 viewer.gettable().setlayoutdata(data); 13 return viewer; 14 Ред 7,8,9,10,11,12: viewer-ът ще бъде разположен, така че да заема цялото му отделено пространство. 43

44 TableViewer - Редактиране protected void addcolumns(tableviewer viewer) { viewer.gettable().setheadervisible(true); viewer.gettable().setlinesvisible(true); for (int i = 0; i < COLUMN_NAMES.length; i++) { TableColumn tablecolumn = new TableColumn(viewer.getTable(), SWT.RIGHT); tablecolumn.settext(column_names[i]); tablecolumn.setwidth(100); След създаването на таблицата е необходимо да се създадат и колоните й. Всяка колона има ИМЕ, ПОДРАВНЯВАНЕ, ШИРИНА. При създаването си всяка колона приема таблицата като параметър на конструктура си. 44

45 TableViewer - Редактиране Възможността за редактиране изисква използването на следните допълнителни обекти: org.eclipse.jface.viewers.textcelleditor отговаря за визуалните аспекти относно редактирането и координира работата на останалите обекти свързани с редакцията. org.eclipse.jface.viewers.icelleditorvalidator позволява валидация на въведената стойност. Разглежданият пример има за цел да позволява въвеждането само на целочислени числа. org.eclipse.jface.viewers.icellmodifier служи като посредник между входните данни и данните показвани в графичната част. Има за цел да обработи входната информация преди и след редактирането и в графичната част. 45

46 TableViewer - Редактиране TextCellEditor 1 TextCellEditor editor = new TextCellEditor(fTableViewer.getTable()); 2 ftableviewer.setcelleditors( new CellEditor[] { null,editor, null ); Ред 1: Създава се нов обект от тип TextCellEditor. Ред 2: В разработвания пример таблицата има три колони. Следователно на всеки ред има по три клетки. За всяка клетка може да се използва отделен редактор. Това се налага поради факта, че отделните колони/клетки показват различна по тип информация. В една клетка може да се въвеждат низове докато в друга да се избират цветове. В случай целта е да се редактира само средната колона за другите две не се задават редактори new CellEditor[] { null,editor, null ) 46

47 TableViewer - Редактиране ICellEditorValidator 1 editor.setvalidator(new ICellEditorValidator() { 2 public String isvalid(object value) { 3 if (value instanceof String) { 4 try { 5 Integer.parseInt((String) value); 6 return null; 7 catch (NumberFormatException e) { 8 return "Only numbers allowed"; return "Unsupported value"; 12 ); Ред 2: ICellEditorValidator има един метод isvalid() приемащ като параметър въведената от потребителя стойност. Методът трябва да върне null ако стойността е валидна. Ред 5: Стойността ще е валидна само ако е текстов низ, който може да се преобразува в цяло число 47

48 TableViewer - Редактиране ICellModifier Най-сложният обект в дадения пример. Служи като контролер между потребителския интерфейс и входните данни ftableviewer.setcellmodifier(new ICellModifier() { public boolean canmodify(object element, String property) { /*...code missed...*/ public Object getvalue(object element, String property) { /*...code missed...*/ public void modify(object element, String property, Object value) { /*...code missed...*/ ); И трите метода приемат параметър String property. Целта му е да определи коя колона се редактира. Възможно е да съществуват различни редактори за различните колони, но съществува единствен обект от тип IСellModifier. 48

49 TableViewer - Редактиране ICellModifier Всяка колона има характеристика отговаряща на параметъра property. При редактирането на дадена колона като параметър се предава тази стойност. Задаването на property става чрез ftableviewer.setcolumnproperties(column_names); В случай COLUMN_NAMES е масив от низове. Представлява имената на колоните. По този начин имената ще се използват за различаване на различните колони при тяхното редактиране. 49

50 TableViewer - Редактиране ICellModifier - canmodify(...) 1 ftableviewer.setcellmodifier(new ICellModifier() { 2 public boolean canmodify(object element, String 3 property) { 4 if (COLUMN_NAMES[1].equals(property) { 5 return true; 6 7 return false; 8 /*...code missed...*/ Методът определя коя колона може да се редактира и коя не. В случай ред 4 проверява дали потребителят се опитва да редактира колоната с характеристика COLUMN_NAMES[1] - Dec. 50

51 TableViewer - Редактиране ICellModifier - getvalue(...) 1 ftableviewer.setcellmodifier(new ICellModifier() { 2 public Object getvalue(object element, String 3 property) { 4 if (COLUMN_NAMES[1].equals(property)) { 5 return ((Integer) element).tostring(); 6 7 return null; 8 /*...code missed...*/ Методът определя стойността на дадената колона. В дадения пример задължително трябва да върен низ. Ред 5 извършва преобразуването от обект Integer към String. 51

52 TableViewer - Редактиране ICellModifier - modify(...) 1 ftableviewer.setcellmodifier(new ICellModifier() { 2 public void modify(object element, String property, Object value) { 3 if (element instanceof TableItem && value!= null) { 4 int index = ((TableItem) element). getparent(). indexof((tableitem) element); 5 if (COLUMN_NAMES[1].equals(property)) { 6 finput[index] = Integer.parseInt((String) value); 7 8 ftableviewer.refresh(); ); 52

53 TableViewer - Редактиране ICellModifier - modify(...) 3 if (element instanceof TableItem && value!= null) { 4 int index = ((TableItem) element). getparent(). indexof((tableitem) element); Ред 3: Проверка за коректност на предадените данни. Предаденият за редакция елемент трябва да е от тип TableItem. Новата стойност value не трябва да е null. (Възможно е да е null ако се извърши невалидно въвеждане.) Ред4: TableItem представлява ред от таблицата. В ред 4 намираме индекса на този ред. Този индекс ни е необходим, за да промениме стойността във входния масив. Посочения тук подход се отнася само за разработвания пример. Възможни са други решения. 53

54 TableViewer - Редактиране ICellModifier - modify(...) 5 if (COLUMN_NAMES[1].equals(property)) { 6 finput[index] = Integer.parseInt((String) value); 7 8 ftableviewer.refresh(); Ред 5: Проверка за колоната. Ред 6: Нововъведената от потребителя стойност се предава чрез параметъра value. Тъй като вече е намерен индексът на редактирания елемент се променя стойността във входния масив. Ред 8: Входните данни са променени. Следователно таблицата трябва да се обнови. Обновяването се извършва чрез метода ftableviewer.refresh() 54

55 TableViewer - Редактиране Разработеният viewer дава възможност за редакция и валидация на редактираните стойностти. След промяната на някое число таблицата се обновява и новите стойности се изписват. 55

56 Обобщение JFace предоставя viewer-и. Тези viewer-и се зползват като обвивка на обектите и улесняват значително тяхното графично изобразяване. JFace не предоставя само viewer-и. Налични са още магьосници (wizards), диалогови прозорци (dialogs), класове улесняващи текстообработката и др. JFace не е графична библиотека и няма за цел да замени SWT, а да предостави допълнителни улеснения на програмиста при използването на SWT. Възможна е реализацията на графично приложение и без JFace. 56

57 Copyright This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 2.5 Bulgaria License. To view a copy of this license, visit creativecommons.org/licenses/by-nc-sa/2.5/bg/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. 57

Title Tues 1 Кирил TUES

Title Tues 1 Кирил TUES Title Editors @ Tues 1 Editors Основният начин за създаване и модифициране на ресурси в Eclipse са Редакторите. Съществуват значителен брой редактори от найпростите текстови редактори до по-сложни редактори

Подробно

ИНТЕРНЕТ ПРОГРАМИРАНЕ - JAVA JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври

ИНТЕРНЕТ ПРОГРАМИРАНЕ - JAVA JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври 2008 JAVA ОБЕКТИ Забележка: Тази лекция е адаптация на лекция от курса: 6.092 Java

Подробно

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет 2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнението представя кратко въведение в теорията на лексическия

Подробно

Сериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23

Сериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23 Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23 f «data; f» data; Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 2 / 23 Първо изискване:

Подробно

Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re

Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.1 27 февруари 2005 г. 1 #include < cstdio

Подробно

Black and White

Black and White Advanced C++ Memory Management Йордан Димитър Зайков Трендафилов Memory Management Effective C++ 2 nd ed: 3, 5, 7, 8, 9, 10 More Effective C++: 1, 3, 8 Exceptional C++: 35, 36 Какво всъщност прави new?

Подробно

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.1 9 март 2005 г. template< class

Подробно

ECDL_ICDL Spreadsheets.doc

ECDL_ICDL Spreadsheets.doc ECDL / ICDL Електронни таблици Учебна програма Цел Този документ съдържа подробна информация относно учебната програма за модул ECDL / ICDL Електронни таблици. Учебната програма очертава знанията и уменията,

Подробно

Kontrolno 5, variant 1

Kontrolno 5, variant 1 N P - П Ъ Л Н И З А Д А Ч И КОНТРОЛНО 5 ПО ДИЗАЙН И АНАЛИЗ НА АЛГОРИТМИ СУ, ФМИ ( ЗА СПЕЦИАЛНОСТ КОМПЮТЪРНИ НАУКИ, 1. ПОТОК; 3 МАЙ 018 Г. ) Задача 1. Разглеждаме задачата за разпознаване LongestCycle:

Подробно

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор Структура на програма в C Част 7 - масиви, оператор за индексиране, sizeof оператор Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София

Подробно

Структура на програма в C - Част 9 - низове от символи, C-string

Структура на програма в C - Част 9 - низове от символи, C-string Структура на програма в C Част 9 - низове от символи, C-string Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София 15 май 2019 г. И. Георгиев,

Подробно

Lush Green

Lush Green Конструктори Жизнен цикъл на обект За обекта се заделя памет и се свързва с неговото име Извиква се подходящ конструктор на обекта... (достъп до компоненти на обект, изпълняване на операции) Достига се

Подробно

Виртуални функции

Виртуални функции Виртуални функции Статично свързване Как компилаторът избира кой метод или коя функция да бъде извикана? Прави се сравнение между формални и фактически параметри и се избира най-точното съвпадение в случай,

Подробно

1 КаБел ЕООД Документация за софтуерния продукт КаБел ЕООД, подпомагащ организация на складовата дейност в железария Автор: Румен Ангелов История на в

1 КаБел ЕООД Документация за софтуерния продукт КаБел ЕООД, подпомагащ организация на складовата дейност в железария Автор: Румен Ангелов История на в 1 КаБел ЕООД Документация за софтуерния продукт КаБел ЕООД, подпомагащ организация на складовата дейност в железария Автор: Румен Ангелов История на версиите 1.10 *подредба име, размер в наличност екран

Подробно

Eclipse Tues: Overview 1

Eclipse Tues: Overview 1 Eclipse Eclipse @ Tues: Overview 1 Eclipse Eclipse is an open source community whose projects are focused on building an open development platform comprised of extensible frameworks, tools and runtimes

Подробно

ВТОРА ГЛАВА

ВТОРА ГЛАВА Първи стъпки в SPSS Statistical Package for Social Science (SPSS статистически пакет за социални науки) е компютърна програма, работеща в средата на операционна система Windows, която е специализирана

Подробно

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА У Ч Е Б Н А П Р О Г Р А М А ЗА ЗАДЪЛЖИТЕЛНА ПРОФЕСИОНАЛНА ПОДГОТОВКА ПО ПРОГРАМИРАНЕ И АЛГОРИТМИЧНИ ЕЗИЦИ ЗА ПРОФЕСИЯ: КОД 482010 ИКОНОМИСТ - ИНФОРМАТИК СПЕЦИАЛНОСТ:

Подробно

ЕВРОПЕЙСКИ СЪЮЗ Европейки фонд за регионално развитие Инвестираме във вашето бъдеще ОПЕРАТИВНА ПРОГРАМА Развитие на конкурентоспособността на българск

ЕВРОПЕЙСКИ СЪЮЗ Европейки фонд за регионално развитие Инвестираме във вашето бъдеще ОПЕРАТИВНА ПРОГРАМА Развитие на конкурентоспособността на българск BG161PO003-1.1.06-0022-C0001 Ръководство за работа със системата Този документ е създаден с финансовата подкрепа на Оперативна програма на българската икономика 2007-2013, съфинансирана от Европейския

Подробно

Потребителско ръководство за платформа за кандидатстване по НП на МОН v0.4 2

Потребителско ръководство за платформа за кандидатстване по НП на МОН v0.4 2 Потребите)с+о ръ+о-одст-о за п)атформа за +андидатст-ане по Национа)ни програми (НП) +ъм Министерст-о на образо-анието и нау+ата Адрес: http://np.mon.bg/ Съдържание Работа с платформата... 3 Смяна на паролата...

Подробно

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision :

Подробно

Wolfram Mathematica & SQL

Wolfram Mathematica & SQL Wolfram Mathematica & SQL Емил Тоцев Сп. Информатика, 4 курс, група 1 б ф. номер: 0801261034 Р-л: Гл.ас. Христина Кулина ФМИ на ПУ П. Хилендарски, 23.02.2012 - Пловдив Съдържание: Въведение в DatabaseLink

Подробно

Управление на перална машина с размита логика Пералните машини в наши дни са обикновен уред в дома. Най-голяма изгода, която потребителя получава от п

Управление на перална машина с размита логика Пералните машини в наши дни са обикновен уред в дома. Най-голяма изгода, която потребителя получава от п Управление на перална машина с размита логика Пералните машини в наши дни са обикновен уред в дома. Най-голяма изгода, която потребителя получава от пералната машина е, че имат почистване, центрофугиране

Подробно

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.3 16 ноември 2004 г. Пример:

Подробно

Lush Green

Lush Green Класове Какво са класовете? Основен инструмент на ООП Средство за дефиниране на абстрактни типове данни Синтактична конструкция, която позволява логическо групиране на данни и операциите над тях Дефиниция

Подробно

Структура на програма в C - Част 2 - типове, функции

Структура на програма в C - Част 2 - типове, функции Структура на програма в C Част 2 - типове, функции Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София 10 март 2019 г. И. Георгиев, Х.

Подробно

http://it.souprovadia.info 1. Какво е облак (Cloud) Най-общо: Технологии и услуги (софтуер, хардуер, масиви от данни), достъпни през интернет; Разполагаме с... Място, където може да се качват файлове,

Подробно

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА 1. У Ч Е Б Н А П Р О Г Р А М А за задължителна професионална подготовка УТВЪРДЕНА СЪС ЗАПОВЕД РД 09-835/20.06.2005 г. 1. Учебен предмет: ПРИЛОЖНИ ПРОГРАМНИ ПРОДУКТИ

Подробно

Проект 1: Форма за решаване на тест Създайте приложение, което тества знанията на ученика по Информатика. Върху формата да се разположат въпроси с по

Проект 1: Форма за решаване на тест Създайте приложение, което тества знанията на ученика по Информатика. Върху формата да се разположат въпроси с по Проект 1: Форма за решаване на тест Създайте приложение, което тества знанията на ученика по Информатика. Върху формата да се разположат въпроси с по четири отговора всеки, от които точно един е верен.

Подробно

Homework 2

Homework 2 Домашна работа 2 по Дизайн и анализ на алгоритми за специалност Компютърни науки, 2. курс, 1. поток СУ, ФМИ, летен семестър на 2017 / 2018 уч. г. СЪСТАВЯНЕ НА АЛГОРИТМИ Задача 1 2 3, а 3, б 3, в Общо получен

Подробно

“ Ада – софт “ – софтуер за автоматизиране на финансово – счет

“ Ада – софт  “ – софтуер за автоматизиране на финансово – счет Офис София ж.к. Младост 1, бл.27 тел.: (02) 974 43 50 (02) 974 37 39 e-mail: office@ada-soft.bg РАЗРАБОТКА, ПРОДАЖБА И ВНЕДРЯВАНЕ НА ИКОНОМИЧЕСКИ СОФТУЕР. ОДИТ РЪКОВОДСТВО ЗА РАБОТА ISO 9001:2008 от Bureau

Подробно

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2 2. Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 lchorbadjiev@elsys-bg.org 1 февруари 2007 г. 1 Наследяване 1 2 2 3 Полиморфизъм 9 1. Наследяване Наследяване UML UML unified modeling

Подробно

Microsoft PowerPoint - DBoyadzhieva

Microsoft PowerPoint - DBoyadzhieva : Изграждане на висококвалифицирани млади изследователи по съвременни информационни технологии за оптимизация, разпознаване на образи и подпомагане вземането на решения Минимизиране на броя на признаците

Подробно

C++

C++ Управляващи оператори в C++ Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 18 30 октомври 2018 г. Трифон Трифонов (УП 18/19) Управляващи оператори в C++ 18 30 октомври

Подробно

Title of Presentation

Title of Presentation INDESIGN УРОК 1 ЗАПОЗНАВАНЕ С ПРОГРАМАТА Изготвил: инж. Дарина Атанасова, ркк при ІV ЕГ Начален екран. Нов документ. Първоначални настройки на документ. Промяна на мерните единици. Промяна на настройките

Подробно

Структура на програма в C - Част 6 - goto, switch, break и continue клаузи

Структура на програма в C - Част 6 - goto, switch, break и continue клаузи Структура на програма в C Част 6 - goto, switch, break и continue клаузи Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София 21 април

Подробно

Системи за управление на версии - Работа с git

Системи за управление на версии - Работа с git Системи за управление на версии Работа с git Иван Георгиев, Христо Иванов, Христо Стефанов Tехнологическо училище "Електронни системи", Технически университет, София 28 февруари 2019 г. И. Георгиев, Х.

Подробно

Microsoft Word - 12-Teacher_Getting Loopy BGG.docx

Microsoft Word - 12-Teacher_Getting Loopy BGG.docx СЪЗДАВАНЕ НА ЦИКЛИ Времетраене на урока: 30 минути. Основната продължителност на урока включва само дейностите. Въвеждащите и обобщаващи предложения могат да се използват за задълбочаване на знанията,

Подробно

Slide 1

Slide 1 Списъци. Структура и синтаксис. Създаване и показване. Основни операции(добавяне, изваждане на елемент или цял подсписък; подреждане). Трансформации. проф. дмн С. Христова Списъци Списъците / list са основна

Подробно