понедельник, 28 марта 2016 г.

Java: Создание интерфейса пользователя

Ни одна современная программа, предназначенная для пользователя, не обходится без удобного, понятного, в идеале – красивого пользовательского интерфейса (GUI).



Мы познакомимся с пакетом AWT.

Пакет java.awt

Пакет java.awt, предоставляет технологию Abstract Window Toolkit (AWT) для создания графического (оконного) интерфейса пользователя – GUI.  Мы рассмотрим несколько инструментов, доступных программисту – работа с цветами, шрифтами, отрисовка графических примитивов, менеджеры компоновки.

Abstract Windowing Toolkit (AWT) - набор классов Java, которые позволяют нам создавать графический интерфейс пользователя (GUI) и принимать пользовательский ввод через клавиатуру и мышь. AWT обеспечивает нас различными элементами, которые позволяют создавать привлекательный и эффективный GUI. Он содержит
·        Контейнеры 
·        Компоненты 
·        Менеджеры компоновки
·        Графические примитивы
·        Шрифты
·        События 

понедельник, 21 марта 2016 г.

Типы в ЯП Java

Преобразование типа
В ЯП Java, как и во многих других, имеются простые встроенные типы данных, имеющие приблизительно те же свойства

При выполнении операций с числами часто требуется преобразование типов (данные разного типа в одном выражении, тип результата не совпадает с типом данных).
Система выполняет автоматическое преобразование типа, если:
  • оба типа совместимы 
  • длина целевого типа больше длины исходного типа.
Преобразование типа производится по следующей схеме:
Сплошные линии обозначают преобразования, выполняемые без потери данных. Штриховые линии говорят о том, что при преобразовании может произойти потеря точности.

Типы char и boolean не совместимы ни между собой, ни с числовыми типами.

Программист может выполнить явное приведение типов,  которое обычно необходимо, когда преобразование из одного типа в другой автоматически не выполняется (преобразование с сужением). Для этого имя типа указывается в скобках явно перед преобразуемым значением:

double a = 3.14;
byte b1 = (byte) a;

Классы-обертки

Простые (примитивные) типы в Java используются из соображений производительности.
Однако, многие из стандартных структур данных, реализованных в Java, оперируют с объектами, и их нельзя использовать с примитивными типами.

понедельник, 14 марта 2016 г.

Классы в Java

Как и в других языках программирования, реализующих возможности ООП, в Java
Объектом называется совокупность разного типа данных и методов, которые их обрабатывают.

Компоненты объекта:
  • данные 
  • методы

Под классом понимается множество объектов, связанных общностью структуры и поведения. Таким образом, класс можно сравнить с шаблоном, по которому создаются объекты.



Библиотеки классов Java

Стандартная библиотека классов в ЯП Java имеет многоуровневую древовидную структуру классов. Именно благодаря стандартным классам упрощается создание и поддержка прикладных программ.

Рассмотрим пример библиотечного класса. Math - класс, который реализует вычисление математических функций:

Использовать методы и константы класса Math можно следующим образом:
Задание 1
Написать программу, которая вводит с клавиатуры декартовы координаты точки (с пояснениями) и рассчитывает её сферические координаты.


Создание собственных классов и объектов

Создадим класс со следующими характеристиками:


понедельник, 21 декабря 2015 г.

Класс! - Наследование и полиморфизм

Поэтапно решим задачу
Создать класс «окружность» (метод рассчитывает площадь) и два производных класса «цилиндр» и «конус» » (методы каждого класса рассчитывают площадь поверхности объемной фигуры и её объём). Продемонстрировать необходимость виртуальных методов при использовании указателей на объекты.

Этап 1. Создание класса Окружность.  (Использовать материал)
а) Определение класса (поля: r, L,S; методы: конструктор, Длина окружности, Площадь).
б) Описание конструктора.
в) Функция main(): описание объекта-экземпляра класса
г) Описание других методов
д) Функция main(): вызов методов для вычисления и печати длины окружности и площади.
е) Описание указателя на объект класса. Создание динамического объекта. Вызов методов для вычисления и печать длины окружности и площади с помощью оператора ->(см. ниже)

Пример работы с динамическими объектами (нажмите на рис, чтобы сделать крупнее):


Этап 2. Создание класса-наследника Цилиндр (использовать материал)
а) Описание класса-наследника: доп. поля (высота); переопределённый метод Площадь; новый метод Объём.
б) Описание конструктора с вызовом конструктора родителя.
в) Функция main(): добавляем описание объекта-экземпляра класса-наследника.
г) Переопределение метода Площадь, его вызов для проверки.
д) Определение метода Объём, его вызов для проверки.

Этап 3. Демонстрация возможностей позднего связывания
а) Убираем из main() вывод на экран полей всех объектов
б) Добавляем в родительский класс поле nom, которое используем для определения типа объекта. Напишем метод, который будет возвращать это поле.
в) Описываем функцию AllPrint (не принадлежащую классам), которая выводит на экран радиус, высоту (если есть), площадь поверхности и объем (если есть) объекта, переданного с помощью указателя.
г) убеждаемся, что система неправильно рассчитывает площадь (потому что вызывает метод родителя для любого объекта.
д) Делаем нужные методы виртуальными.


Этап 4. Создание класса Конус


Пример программы
Здесь позже появится пример программы.
Вопросы задавайте в комментариях к этому сообщению.

понедельник, 14 декабря 2015 г.

Пишем классные программы!


Пишем первую программу в стиле ООП. Разработку ведем поэтапно, как описано в материале

Классы (Часть 1. Определение и описание)

написав очередную часть, запускаем проект.

вторник, 8 декабря 2015 г.

Задача о поиске шаблона

Итак, окончательная версия программы. Отладочная печать оставлена, чтобы можно было проследить, как это работает. Поправка, которую необходимо было сделать, чтобы программа работала корректно: в функции поиска оператор     p2=psh; нужно поставить перед оператором
if(*p1==*p2){cout<<*p1<<" "<<n1<<endl; (т.к. мы портили указатель p2 и дальнейшее сравнение было некорректным). Под этой версией расписаны отдельные шаги, которые могут повторить те, у кого что-то не получилось (правда, имена переменных несколько другие - это шпаргалка, в которую я не подглядывала).

Окончательная версия программы

 Заголовочный файл  head.h
#include <iostream>
#include <string.h>
using namespace std;

int vvsh(char sh[]);
int poisk(char* pstr,char* psh,int nsh);

main.cpp
#include "head.h"

void main()
{
char str[]="moja mama varit mamalygu na balkone";
char shablon[10];
int nsh=vvsh(shablon);
cout << "dlina= "<< nsh << endl;
puts(shablon);
char* pstr=str;
char* psh=shablon;
int nn=poisk(pstr,psh,nsh);
cout << "mesto shablona= "<< nn << endl;
cout << "biblio function= "<<strstr(str,shablon)-str<< endl;

}


/*
Написать программу с функцией поиска первого вхождения шаблона в текст. В качестве
первого параметра функция принимает указатель на строку, в которой нужно искать шаблон. В
качестве второго параметра указатель на строку-шаблон, которую нужно найти. Функция
возвращает позицию первого вхождения строки-шаблона, если он присутствует в строке
(помните, что в C++ принято считать с 0), и -1, если шаблона в тексте нет. В основной
программе инициализировать строку при описании, строку-шаблон вводить с клавиатуры.
Проверить правильность работы написанной функции с помощью функции strstr(s1,s2) из
библиотеки <string.h>
Контрольный пример:
Строка "moja mama varit mamalygu na balkone"
Шаблоны: "mama" , "mamalygu"

*/
vvod.cpp

#include "head.h"

int vvsh(char sh[])
{
cout<<"vvedite shablon ";
gets(sh);
return strlen(sh);
}

poisk.cpp
#include "head.h"

int poisk(char* pstr,char* psh,int nsh)
{
char* p1=pstr; char* p11;
char* p2=psh;
int n1=0,nn=-1,n2;
if(*p2==0) return n1;
while(*p1!=0)
{
    p2=psh;
if(*p1==*p2){cout<<*p1<<" "<<n1<<endl;
p11=p1;  n2=0;
while(n2<nsh && *p11==*p2){p11++; p2++; n2++; cout<<*p11<<" "<<*p2<<" | ";} cout<<endl;
if(*p2==0) return n1;
}
p1++;
n1++;
}
return nn;
}

Отладка программы по шагам:

понедельник, 30 ноября 2015 г.

Обработка символьных строк



В языках Си/Си++ нет специально определенного строкового типа данных. Символьные строки организуются как массивы символов, последним из которых является символ \0..
Строка описывается как символьный массив:
char STR[20];
char S[10]="cTpoKa"; -инициализация значения
char S[]="cTpoKa";
char S [10] = { 'с' ,'Т',‘р',‘о',‘К','а','\0'} ; 
Отдельные символы строки идентифицируются индексированными именами.
S [ 0 ] = 'С' , S[5]='a'.
Пример 1. Обработка строк обычно связана с перебором всех символов от начала до конца. Однако, ввод-вывод строк удобно делать с помощью функций gets() и  puts() из библиотеки <string.h>
В примере с помощью цикла символы в строке s1 заменяются звёздочкой. Признаком конца  перебора символов является обнаружение нулевого символа в конце строки. То же самое можно сделать с помощью указателя ( в программе - символы в строке s заменяются на ^).
На экран выводится следующее:


Пример 2. Использование библиотеки  <string.h>
Многие нужные функции реализованы в библиотеке <string.h>. При необходимости можно ознакомиться с описанием функций здесь.
В примере ниже  функция strchr(p,c) возвращает указатель на первый символ строки, на которую указывает указатель р, совпадающий со значением переменной с.
В конце программы строка выводится с найденного символа, и выводится на экран его номер.

Пример 3. Обработка строк в функции
Эта программа  делает такую же замену, как в примере 1. Однако, это действие оформлено в виде функции, в которую передаются указатель на строку и символ для замены.



Задачи для самостоятельного решения

1. Написать программу с функцией, которая подсчитывает, сколько раз в данной строке
встречается данная буква. В функцию передается буква и указатель на строку.

2. Написать  программу с функцией поиска первого вхождения шаблона в текст. В качестве
первого параметра функция принимает указатель на строку, в которой нужно искать шаблон. В
качестве второго параметра указатель на строку-шаблон, которую нужно найти. Функция
возвращает позицию первого вхождения строки-шаблона, если он присутствует в строке
(помните, что в C++ принято считать с 0), и -1, если шаблона в тексте нет. В основной
программе инициализировать строку при описании, строку-шаблон вводить с клавиатуры.
Проверить правильность работы написанной функции с помощью функции strstr(s1,s2) из
библиотеки <string.h>
Контрольный пример:
Строка "moja mama varit mamalygu na balkone"
Шаблоны: "mama" ,  "mamalygu"