Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 35 стр [25 вопросов].doc
Скачиваний:
45
Добавлен:
15.06.2014
Размер:
384.51 Кб
Скачать

Первый способ

Этот простейший способ заставляет Windows посылать сообщения WM_TIMER обычной оконной процедуре приложения. Вызов функции SetTimer выглядит следующим образом:

SetTimer(hwnd, 1, iMsecInterval, NULL);

Первый параметр — это описатель того окна, чья оконная процедура будет получать сообщения WM_TIMER. Вторым параметром является идентификатор таймера, значение которого должно быть отличным от нуля. Третий параметр — это 32-разрядное беззнаковое целое, которое задает интервал в миллисекундах. Можно в любое время остановить поток сообщений WM_TIMER: KillTimer(hwnd, 1). Вторым параметром здесь является тот же идентификатор таймера, который использовался при вызове функции SetTimer. Когда оконная процедура получает сообщение WM_TIMER, значение wParam равно значению идентификатора таймера, а lParam равно 0. Значение параметра wParam позволит различать передаваемые в оконную процедуру сообщения WM_TIMER.

Второй способ

Можно заставить Windows пересылать сообщение таймера другой функции из программы. Функция, которая будет получать эти таймерные сообщения, называется функцией "обратного вызова". Это функция программы, которую вызывает Windows. Нужно сообщить Windows адрес этой функции, а позже Windows вызывает ее. Функции CreateDialog и DialogBox используют функции обратного вызова для обработки сообщений в окне диалога. Параметры функции обратного вызова и ее возвращаемое значение зависят от назначения функции обратного вызова. В случае функции обратного вызова для таймера, входными параметрами являются те же параметры, что и параметры оконной процедуры. Таймерная функция обратного вызова не имеет возвращаемого в Windows значения.

Третий способ

Третий способ установки таймера напоминает второй, за исключением того, что параметр hwnd функции SetTimer устанавливается в NULL, а второй параметр игнорируется. Функция возвращает ID таймера: iTimerID = SetTimer(NULL, 0, wMsecInterval, (TIMERPROC) TimerProc);

Возвращаемое функцией SetTimer значение iTimerID будет равно NULL, если таймер недоступен.

Первый параметр функции KillTimer также должен быть равен NULL. Идентификатор таймера должен быть равен значению, возвращаемому функцией SetTimer.

KillTimer(NULL, iTimerID);

Параметр hwnd, передаваемый в TimerProc, также должен быть равен NULL.

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

    1. Конструирование Windows-приложения с использованием пользовательских библиотек. Способы создания и использования.

Динамически подключаемые библиотеки (dynamic-link libraries, DLLs) — краеугольный камень операционной системы Windows, начиная с самой первой ее версии. В DLL содержатся все функции интерфейса Win32 API. Три самых важных DLL-библиотеки: KERNEL32.DLL (управление памятью, процессами и потоками), USER32.DLL (поддержка пользовательского интерфейса, в том числе функции, связанные с созданием окон и передачей сообщений) и GDI32.DLL (графика и вывод текста).

В Windows есть и другие DLL, функции которых предназначены для более специализированных задач. Например, в ADVAPI32.DLL содержатся функции для защиты объектов, работы с реестром и регистрации событий, в COMDLG32.DLL — стандартные диалоговые окна (вроде File Open и File Save), a LZ32.DLL поддерживает декомпрессию файлов.

Создание DLL

Зачастую создать DLLпроще, чем написать приложение, потому что она является лишь набором автономных функций, пригодных для использования любой программой, причем вDLLобычно отсутствует код, предназначенный для обработки циклов выборки сообщений или создания окон. ФункцииDLLпишутся в расчете на то, что их будет вызывать какое-то приложение (ЕХЕ- файл) или другаяDLL. Файлы с исходным кодом компилируются и компонуются так же, как и при создании ЕХЕ - файла. Но, создаваяDLL, Вы должны указывать компоновщику ключ /DLL. Он заставляет компоновщик записывать в конечный файл информацию, по которой загрузчик операционной системы определит, что данный файл —DLL, а не приложение.

Чтобы приложение (или другая DLL) могло вызывать функции изDLL, исполняемый файл нужно сначала спроецировать на адресное пространство вызывающего процесса. Это делается либо неявной компоновкой при загрузке, либо явной — в период выполнения.

Как только DLLспроецирована на адресное пространство вызывающего процесса, ее функции доступны всем потокам этого процесса. Фактически библиотеки при этом теряют почти всю индивидуальность: для потоков код и данныеDLL— просто дополнительный код и данные, оказавшиеся в адресном пространстве процесса. Когда поток вызывает изDLLкакую-то функцию, та считывает свои параметры из стека потока и размещает в этом стеке собственные локальные переменные. Кроме того, любые созданные кодомDLLобъекты принадлежат вызывающему потоку или процессу —DLLвWin32 ничем не владеет.

Вы уже знаете, что глобальные и статические переменные ЕХЕ - файла не разделяются его параллельно выполняемыми экземплярами. В Windows95 это достигается за счет выделения специальной области памяти для таких переменных при проецировании ЕХЕ - файла на адресное пространство процесса, а вWindowsNT— с помощью “копирования при записи” (copy-on-write), рассмотренного в главе 5. Глобальные и статические переменныеDLL-библиотеки обрабатываются точно так же. Когда какой-то процесс проецирует образDLLфайла на свое адресное пространство, система создает также экземпляры глобальных и статических переменных. В этой главе я расскажу о приеме, позволяющем нескольким пpoeкциямDLLсовместно использовать один набор глобальных и статических переменных. Однако вWin32 по умолчанию это не делается — чтобы добиться нужного эффекта, потребуются дополнительные усилия.

В 16-разрядной WindowsDLL-библиотеки обрабатываются иначе, чем вWin32. В первойDLL-библиотека при загрузке становится в некотором смысле частью операционной системы. Все приложения, выполняемые в данный момент, получают доступ кDLLи всем содержащимся в ней функциям. ВWin32-cpeдeDLLнужно спроецировать на адресное пространство процесса, прежде чем тот сможет вызывать ее функции.

Глобальные и статические данные DLL-библиотек в 16-разряднойWindowsиWin32 тоже обрабатываются принципиально по-разному. В первой каждаяDLLимеет свой сегмент данных. В нем находятся все глобальные и статические переменныеDLL,aтакже ее закрытая локальная куча. При вызове изDLLфункцииLocalAllocсоответствующая область памяти выделяется из сегмента данныхDLL, размер которого, как и размер всех других сегментов, ограничен 64 Кб.

Такая схема позволяет разделять данные между несколькими процессами, поскольку локальная куча доступна DLLнезависимо от того, каким процессом вызвана одна из ее функций.

Проецирование DLLна адресное пространство процесса

Как я уже говорил, чтобы поток мог вызвать функцию из DLL-библиотеки, последнюю нужно, сначала спроецировать на адресное пространство процесса, которому принадлежит вызывающий поток. Сделать это можно одним из двух способов: неявной компоновкой с функциямиDLLи явной загрузкойDLL.

Неявная компоновка

Неявная компоновка (implicitlinking) — самый распространенный метод проецирования образаDLL-файла на адресное пространство процесса. При сборке приложения компоновщику нужно указать наборLIB-файлов. Каждый такой файл содержит список функций даннойDLL, вызов которых разрешен приложениям (или другойDLL). Обнаружив, что приложение ссылается на функции, упомянутые вLIB-файле дляDLL, компоновщик внедряет имя этойDLLв конечный исполняемый файл. При загрузке ЕХЕ - файла система просматривает его образ на предмет определения необходимых емуDLL, после чего пытается спроецировать их на адресное пространство процесса. ПоискDLLосуществляется в :

  1. каталоге, содержащем ЕХЕ - файл;

  2. текущем каталоге процесса;

  3. системном каталоге Windows;

  4. основном каталоге Windows;

  5. каталогах, указанных в переменной окружения PATH.

Если файл DLLне найден, система открывает окно с сообщением и немедленно завершает процесс.

Библиотеки, спроецированные на адресное пространство этим методом, не отключаются от него до завершения процесса.

Явная компоновка

Образ DLL-файла можно спроецировать на адресное пространство процесса явным образом для чего один из потоков должен вызвать либоLoadLibrary, либоLoadLibraryEx:

HINSTANCE LoadLibrary(LPCTSTR IpszLibFile);

HINSTANCE LoadLibraryEx(LPCTSTR IpszLibFile, HANDLE hFile, DWORD dwFlags);

Обе функции ищут образ DLL-файла (в каталогах, список которых приведен в предыдущем разделе) и пытаются спроецировать его на адресное пространство вызывающего процесс. Значение типаHINSTANCE, возвращаемое обеими функциями, сообщает адрес виртуальной памяти, по которому спроецирован образ файла. Если спроецироватьDLLна адрес пространство процесса не удалось, функции возвращаютNULL.

В 16-разрядной WindowsфункцияLoadLibraryуказывает на ошибку, возвращая описатель со значением, меньшим 32. Это код, подсказывающий причину сбоя. ВWin32 в таких случаях всегда возвращаетсяNULL, и, чтобы узнать причину ошибки, поток должен вызватьGetLastError.

Если DLLзагружается явно, ее можно отключить от адресного пространства процесса функциейFreeLibrary.

BOOLFreeLibrary(HINSTANCEhinstDll);

У Win32DLLможет быть одна функция входа/выхода, но она необязательна. Система вызывает ее в некоторых ситуациях (о чем речь еще впереди) сугубо в информационных целях, и обычно она используетсяDLLдля инициализации и очистки в конкретных процессах или потоках. Если ВашейDLLподобные уведомления не нужны, Вы не обязаны реализовывать эту функцию. Пример —DLL, содержащая исключительно ресурсы. Но если эта функция вDLLвсе же есть, она должна выглядеть так:

BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason,

LPVOID flmpLoad) {

switch (fdwReason) {

case DLL_PROCESS_ATTACH:

// DLLпроецируется на адресное пространство процесса

break;

case DLL_THREAD_ATTACH:

// создается поток

break;

case DLL_THREAD_DETACH:

// поток завершается корректно

break;

caseDLL_PROCESS_DETACH:

// DLLотключается от адресного пространства процесса

break;

return(TRUE); // используется только для DLL_PROCESS_ATTACH

}

Создавая DLL, Вы создаете набор функций и хотите, чтобы они были доступны другим ЕХЕ - илиDLL-модулям. ЕслиDLL-функция доступна для вызова из других программ, то говорят, что это экспортируемая (exported) функция. Кроме функций,Win32 позволяет экспортировать и глобальные переменные.

    1. Виртуальная память в Win32. Функции работы с виртуальной памятью.

    1. Отображение файлов в память. Назначение и особенности применения.

Операции cфайлами — то, что рано или поздно приходится делать практически во всех программах, и всегда это вызывает массу проблем. Должно ли приложение просто открыть файл, считать и закрыть его, или открыть, считать фрагмент в буфер и перезаписать его в другую часть файла? ВWin32 многие из этих проблем решаются очень изящно — с помощью проецируемых в память файлов (memory-mappedfiles).

Как и виртуальная память, проецируемые файлы позволяют резервировать регион адресного пространства и передавать ему физическую память. Различие между этими механизмами состоит в том, что в последнем случае физическая память не выделяется из страничного файла, а берется из файла, уже находящегося на диске. Как только файл спроеци рован в память, к нему можно обращаться так, будто он целиком в нее загружен.

Проецируемые файлы применяются для:

  • загрузки и выполнения ЕХЕ и DLLфайлов. Это позволяет существенно экономить как на размере страничного файла, так и на времени, необходимом для подготовки приложения к выполнению;

  • доступа к файлу данных, размещенному на диске. Это позволяет обойтись без операций файлового ввода/вывода и буферизации его содержимого;

  • разделения данных между несколькими процессами, выполняемыми на одной машине. (В Win32 есть и другие методы для совместного доступа разных процессов к одним данным — но опять же они реализованы на основе проецируемых в память файлов).

Проецирование в память ЕХЕ- и DLL-файлов

При вызове из потока функции CreateProcess система:

  1. Отыскивает ЕХЕ-файл, указанный при вызове CreateProcess. Если файл не найден, новый процесс не создается, а функция возвращает NULL.

  2. Создает новый объект ядра “процесс”.

  3. Создает адресное пространство нового процесса (размером 4 Гб).

  4. Резервирует регион адресного пространства — такой, чтобы в него поместился заданный ЕХЕ-файл. Желательное расположение этого региона указывается внутри самого ЕХЕ-файла. По умолчанию базовый адрес ЕХЕ-файла — 0x00400000. Но при создании исполняемого файла приложения это значение может быть изменено параметром компоновщика /BASE.

  5. Отмечает, что физическая память, увязанная с зарезервированным регионом, — ЕХЕ-файл на диске, а не страничный файл.

Спроецировав ЕХЕ-файл на адресное пространство процесса, система обращается к разделу ЕХЕ-файла со списком DLL-модулей, содержащих необходимые программе функции. После этого система — вызовом LoadLibrary— поочередно загружает указанные (а при необходимости и дополнительные) DLL-модули. Всякий раз, когда для загрузки DLL вызывается LoadLibrary, система выполняет действия, аналогичные описанным выше в пп. 4 и 5:

  1. Резервирует регион адресного пространства — такой, чтобы в него мог поместиться заданный DLL-файл. Желательное расположение этого региона указывается внутри самого DLL-файла. По умолчанию Visual C++ присваивает DLL-модулям базовый адрес 0x10000000. Но при компоновке DLL-модуля это значение можно изменять с помощью параметра /BASE. У всех стандартных системных DLL-модулей, входящих в комплект поставки Windows NT и Windows 95, разные базовые адреса.

  2. Если зарезервировать регион по желательному для DLL базовому адресу не удается (либо он слишком мал, либо занят каким-то еще ЕХЕ- или DLL-файлом), система пытается найти другой регион. Но по двум причинам такая ситуация весьма неприятна. Во-первых, если в DLL нет настроечной информации (fixup information), загрузка может вообще не получиться. (Настроечную информацию можно удалить из DLL при компоновке с параметром /FIXED. Это уменьшит размер DLL-файла, но тогда модуль должен грузиться только по указанному базовому адресу.) Во-вторых, системе приходится выполнять модификацию адресов (relocation) внутри DLL. В Windows 95 эта операция осуществляется по мере подкачки страниц в оперативную память. Но в Windows NT на это уходит дополнительная физическая память, выделяемая из страничного файла, да и загрузка такого DLL-модуля займет больше времени.

  3. Отмечает, что физическая память, связанная с зарезервированным регионом, — DLL-файл на диске, а не страничный файл. Если Windows NT пришлось выполнять модификацию адресов из-за того, что DLL не удалось загрузить по желательному базовому адресу, она запоминает, что часть физической памяти для DLL связана со страничным файлом.

Если система почему-либо не свяжет ЕХЕ-файл с необходимыми ему DLL-модулями, на экране появится соответствующее сообщение, а адресное пространство процесса и объект “процесс” освобождаются. При этом CreateProcess возвращает FALSE, а прояснить причину сбоя помогает функция GetLastError.

После увязки ЕХЕ- и DLL-файлов с адресным пространством процесса начинает исполняться стартовый код ЕХЕ-файла. Подкачку страниц, буферизацию и кэширование система берет на себя. Например, если код в ЕХЕ-файле переходит к команде, не загруженной в память, возникает ошибка. Обнаружив ее, система перекачивает нужную страницу кода из образа файла на страницу оперативной памяти. Затем отображает страницу оперативной памяти на должный участок адресного пространства процесса, тем самым позволяя потоку продолжать выполнение кода так, будто все его страницы уже загружены в память. Все эти операции скрыты от приложения и периодически повторяются при каждой попытке процесса обратиться к коду или данным, отсутствующим в оперативной памяти.

    1. Понятие системы. Структура системы. Типология взаимосвязей между системами.

Под системой понимают некоторую сущность с некот. Явно определенными атрибутами и поведением.

  1. Состояние

  2. поведение.

Взаимосвязь 2-х видов:

  1. горизонтальная

  2. вертикальные

При появлении системы выделяют причину и следствие, на стыке чего что-то новое

Опр: система – библиотека функции, работа с данными.

Подсистема: - ф-я, структура данных, алгоритм.

Надсистема: - программа работающая с системой, использ. Программист.

Понятие открытой и закрытой системы:

Законы формирования систем:

  1. двойственности, рассматр. Причины и следствие

  2. тройственности, рассм. Причины –> переходной процесс -> следствие,

управление->взаимодействие->форма

  1. развитие 4 фаз: форма -> взаимод. -> управление -> переход в подсист.

  2. сеть уровней.

Понятие архитектуры :

Архитектура: \\

программные сист:

  1. Кон. Польз.

  2. прикладной программист

  3. сист программисты, операторы ЭВМ сист. Админы.

Архитектура системы включает 3 вида важных взаимодейств. структур:

  1. Программной – программа обработки информ

  2. логической – ф-я определения основн операции

  3. физич. – драва, …

    1. Объектно-ориентированная парадигма. Основные понятия.

Парадигма(грамматич.) - система форм изменяющегося слова, конструкции. (Толковый словарь Ожегова).

Применительно к программированию парадигма- это система синтаксических и семантических правил построения программ для решения определенного класса задач.

В настоящее время существует целый ряд подходов к написанию программ:

  • -процедурное программирование (как в DOS-Паскале);

  • -объектно-ориентированное программирование (как в Object Pascal);

  • -программирование, основанное на правилах (как в языке Пролог);

  • -визуальное (компонентное) программирование (практически во всех современных средах -разработки, включая Delphi);

  • -программирование, управляемое событиями (создание интерактивных программ) и т.д.

Зачастую при разработке программы используется несколько парадигм. Например, при создании программы для Windows мы можем одновременно пользоваться программированием, управляемым событиями, объектно-ориентированным программированием и визуальным подходом.

Большое число парадигм обуславливается не только разнообразием задач, но и разнообразием архитектур компьютеров и операционных систем. Общая природа компьютерной техники позволяет с большей или меньшей эффективностью моделировать одну архитектуру с помощью другой.

Так, для задач, использующих нейронные сети, существуют специальные нейрокомпьютеры, архитектура которых позволяет обрабатывать множество процессов в параллельном режиме. Однако, с эмулящиями нейросетей можно работать и на обычном персональном компьютере (пакеты NeuroShell, NeuroWin и др.).

Для решения каждого конкретного класса задач наиболее удачнойбудет считаться та парадигма, которая обеспечивает:

  • -максимальную скорость разработки проекта;

  • -максимальную простоту модификации;

  • -максимальную надежность программ;

  • -максимальную скорость выполнения готового программного продукта.

    1. Язык Java. История создания. Инструментальные средства разработки. Структура простейшего приложения.

Язык Java зародился как часть проекта создания передового программного обеспечения (ПО) для различных бытовых приборов. Реализация проекта была начата на языке С++, но вскоре возник ряд проблем, наилучшим средством борьбы с которыми было изменение самого инструмента - языка программирования. Стало очевидным, что необходим платформо-независимый язык программирования, позволяющий создавать программы, которые не приходилось бы компилировать отдельно для каждой архитектуры и можно было бы использовать на различных процессорах под различными операционными системами.

Рождению языка Java предшествовала довольно интересная история. В 1990 году разработчик ПО компании Sun Microsystems Патрик Нотон(Patrick Naughton) понял, что ему надоело поддерживать сотни различных интерфейсов программ, используемых в компании, и сообщил исполнительному директору Sun Microsystems и своему другуСкотту МакНили(Scott McNealy) о своем намерении перейти работать в компанию NeXT. МакНили, в свою очередь, попросил Нотона составить список причин своего недовольства и выдвинуть такое решение проблем, как если бы он был Богом и мог исполнить все, что угодно.

Нотон, хотя и не рассчитывал на то, что кто-то обратит внимание на его письмо, все же изложил свои претензии, беспощадно раскритиковав недостатки Sun Microsystems, в частности, разрабатываемую в тот момент архитектуру ПО NeWS. К удивлению Нотона, его письмо возымело успех: оно было разослано всем ведущим инженерам Sun Microsystems, которые не замедлили откликнуться и высказать горячую поддержку своему коллеге и одобрение его взглядов на ситуацию в Sun Microsystems. Обращение вызвало одобрение и у высшего руководства компании, а именно, у Билла Джоя(Bill Joy), основателя Sun Microsystems, иДжеймса Гослинга(James Gosling), начальника Нотона.

В тот день, когда Нотон должен был уйти из компании, было принято решение о создании команды ведущих разработчиков с тем, чтобы они делали что угодно, но создали нечто необыкновенное. Команда из шести человек приступила к разработке нового объектно-ориентированного языка программирования, который был назван Oak(дуб), в честь дерева, росшего под окном Гослинга.

Вскоре компания Sun Microsystems преобразовала команду Green в компанию First Person. Новая компания обладала интереснейшей концепцией, но не могла найти ей подходящего применения. После ряда неудач неожиданно ситуация для компании резко изменилась: был анонсирован броузер Mosaic - так родился World Wide Web, с которого началось бурное развитие Internet. Нотон предложил использовать Oak в создании Internet-приложений. Так Oak стал самостоятельным продуктом, вскоре был написан Oak-компилятор и Oak-браузер "WebRunner". В 1995 году компания Sun Microsystems приняла решение объявить о новом продукте, переименовав его вJava(единственное разумное объяснение названию - любовь программистов к кофе). Когда Java оказалась в руках Internet, стало необходимым запускать Java-аплеты - небольшие программы, загружаемые через Internet. WebRunner был переименован вHotJavaи компания Netscape встала на поддержку Java-продуктов.

Достоинства языка JAVA: простота и мощь, безопасность, объектная ориентированность, надежность, интерактивность, независимость от архитектуры ЭВМ, интерпретация плюс высокая производительность, простота изучения, богатая объектная среда.

Исходный файл на языке Java - это текстовый файл, содержащий в себе одно или несколько описаний классов. Транслятор Java предполагает, что исходный текст программ хранится в файлах с расширениями Java. Получаемый в процессе трансляции код для каждого класса записывается в отдельном выходном файле, с именем совпадающем с именем класса, и расширением class.

Самая простая программа на языке javaвыглядит так:

class HelloWorld {

public static void main (String args []) {

System. out. println ("Hello World");

}

}

Строка 1

class HelloWorld {

В этой строке использовано зарезервированное слово class. Оно говорит транслятору, что мы собираемся описать новый класс. Полное описание класса располагается между открывающей фигурной скобкой в первой строке и парной ей закрывающей фигурной скобкой в строке 5. Фигурные скобки в Java используются точно так же, как в языках С и С++.

Строка 2

public static void main (String args []) {

Такая, на первый взгляд, чрезмерно сложная строка примера является следствием важного требования, заложенного при разработке языка Java. Дело в том, что в Java отсутствуют глобальные функции. Поскольку подобные строки будут встречаться в большинстве примеров первой части книги, давайте пристальнее рассмотрим каждый элемент второй строки.

Строка 3

System. out. prlntln("Hello World!");

В этой строке выполняется метод println объекта out. Объект out объявлен в классе OutputStream и статически инициализируется в классе System. В главах 9и13у вас будет шанс познакомиться с нюансами работы классов String и OutputStream.

Закрывающей фигурной скобкой в строке 4 заканчивается объявление метода main, а такая же скобка в строке 5 завершает объявление класса HelloWorld.

    1. Язык Java. Описание класса. Данные и методы класса. Модификаторы доступа. Диаграмма классов языка UML.

Базовым элементом объектно-ориентирован­ного программирования в языке Java являет­ся класс. Для того, чтобы создать класс, достаточно иметь исходный файл, в котором будет присутствовать ключевое слово class, и вслед за ним — допустимый идентификатор и пара фигурных скобок для его тела.

class Point {

}

Имя исходного файла Java должно соответствовать имени хранящегося в нем класса. Регистр букв важен и в имени класса, и в имени файла.

класс —это шаблон для создания объекта. Класс определяет структуру объекта и егометоды,образующие функциональный интерфейс. В процессе выполнения Java-программы система использует определения классов для создания представителей классов. Представители являются реальнымиобъектами.Термины «представитель», «экземпляр» и «объект» взаимозаменяемы. Ниже приведена общая форма определения класса.

class имя_класса extends имя_суперкласса { type переменная1_объекта:

type переменная2_объекта:

type переменнаяN_объекта:

type имяметода1(список_параметров) { тело метода;

}

type имяметода2(список_параметров) { тело метода;

}

type имя методаМ(список_параметров) { тело метода;

}

}

Ключевое слово extends указывает на то, что «имя_класса» —это подкласс класса«имя_суперкласса».Во главе классовой иерархии Java стоит единственный ее встроенный класс — Object. Если вы хотите создать подкласс непосредственно этого класса, ключевое слово extends и следующее за ним имя суперкласса можно опустить — транслятор включит их в ваше определение автома­тически.

Методы - это подпрограммы, присоединенные к кон­кретным определениям классов. Они описываются внутри определения класса на том же уровне, что и переменные объектов. При объявлении метода задаются тип возвращаемого им результата и список параметров. Общая форма объявления метода такова:

тип имя_метода (список формальных параметров) {

тело метода:

}

Тип результата, который должен возвращать метод может быть любым, в том числе и типом void - в тех случаях, когда возвращать результат не требуется. Список формальных параметров - это последова­тельность пар тип-идентификатор, разделенных запятыми. Если у метода параметры отсутствуют, то после имени метода должны стоять пустые круглые скобки.

class Point { int х, у;