nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 16 Apr 2024 07:46



Reply to topic  [ 51 posts ]  Go to page 1, 2, 3, 4  Next
Мои лекции по Java (1998-2003) 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22517
Location: Silicon Valley
Reply with quote
Сегодня самой быстро развивающейся технологией
компьютерной индустрии становится технология Java. Технология
Java появилась на волне огромного интереса к глобальной сети
Интернет и Web. Эта технология была разработана в стенах Sun
Microsystems и опирается на новый язык объектно ориентированного
программирования Java. В основе Java лежат два принципа -
независимость от программно-аппаратной платформы (операционная
система плюс процессор) и безопасность создаваемых приложений.
Первый принцип реализуется через механизм виртуальной машины Java
(Virtual Java Machine - JVM). Второй - прежде всего за счёт самого
языка, который включает строгую типизацию, запрет адресной
арифметики, автоматическую сборку "мусора".

На языке Java могут создаваться как автономные программы,
так и так называемые апплеты - небольшие блоки кода, которые
загружаются из Интернета в Web-браузер и исполняются. Java
поддерживают Netscape Navigator начиная с версии 2.0 и Microsoft
Internet Explorer начиная с версии 3.0.

Синтаксис языка Java во многом похож на С++, но идеология
языка совершенно другая. В отличие от многих других языков,
компилятор Java компилирует исходные тексты не в двоичный код
конкретного процессора, а в код виртуальной машины Java (JVM).
При исполнении этого кода происходит либо интерпретация этого
кода, как подразумевалось с самого начала и используется в
бесплатном комплекте разработчика Java фирмы Sun Microsystems,
либо компиляция байт-кода JVM в код конкретного процессора в
момент вызова класса на исполнение (just-in-time), как сделано во
многих коммерческих приложениях и в новых Web-браузерах. Во
втором случае Java программы работают существенно быстрее - но
увеличивается время загрузки, так как в процессе загрузки
осуществляется компиляция.

Бесплатный комплект разработчика Java (Java Development
Kit - JDK) фирмы Sun Microsystems распостраняется через Интернет
http://java.sun.com, также его можно найти на различных
компакт-дисках. JDK версии 1.0 появился в январе 1996 года, то
есть официально языку Java сейчас чуть больше двух лет. У нас на
кафедре проинсталирован JDK версии 1.0.1. Sun Microsystems
предлагает варианты JDK для различных платформ - Windows,
Macintosh, различных UNIX-систем. Получается, что если вы
напишите программу на Java, то она будет адекватно работать на
любой из этих платформ. Вариант JDK для Windows-95
распостраняется в самораспакующемся zip-файле, который содержит
длинные имена файлов. Размер JDK 1.0 составлял 3.7 Мбайт, а
версии 1.0.1 - уже 4.3 Мбайт. В JDK входят основные средства
разработки приложений - компилятор, отладчик, интерпретатор
автономных программ, просмотрщик апплетов и др. Также там есть
стандартная библиотека классов и много примеров Java-программ с
комментариями. К сожалению в JDK нет документации и средств
помощи. При распаковке JDK создаётся каталог JAVA, а в нём
несколько подкаталогов. В подкаталоге DEMO располагаются примеры
программ, в подкаталоге LIB - библиотека классов в zip-архиве.
В подкаталоге BIN располагаются все исполняемые файлы, в том числе:

- javac.exe - компилятор Java,
- java.exe - интерпретатор автономных программ,
- appletviewer.exe - просмотрщик апплетов.

Все исполняемые файлы принимают параметры из командной
строки и выводят информацию на консоль, поэтому ими удобно
пользоваться в окне сессии DOS. Исходный текст программы на
языке Java должен быть сохранён в файле с расширением test.java.
В одном файле могут быть описаны несколько классов. Для
компиляции нужно запустить компилятор с одним параметром -
именем файла: javac test.java. При этом каждый класс будет
откомпилирован в свой файл кодов с таким же именем, что и имя
класса. Файл кодов класса имеет расширение *.class.

Как я уже говорил в Java возможно два варианта создания
программ: автономная программа и апплет. Автономная программа
запускается Java-интерпретатором java.exe. А апплет может быть
помещён в Интернет и запущен любым браузером, поддерживающим
Java. В JDK для просмотра апплетов есть программа
appletviewer.exe.

World Wide Web сегодня является самым
популярным ресурсом Интернета, поэтому создатели Java
ориентировались именно на него. Для представления гипертекстовой
информации в WWW используется язык гипертекстовой разметки HTML.
Формат документа HTML следующий:
Code:
<HTML>
<HEAD>
<TITLE>First Page</TITLE>
</HEAD>
<BODY>
   Текст, текст ...
   <A HREF="http://www.uicde.ru">Ссылка в Интернете</A>
   <IMG SRC="test.gif"> Рисунок
   Поддержка Java-апплетов в HTML появилась лишь в 1996 году
   <APPLET CODE="HelloJava.class" WIDTH=400 HEIGHT=300>
   <PARAM NAME=aa VALUE="aaa">
   <PARAM NAME=bb VALUE="bbb">
   </APPLET>
</BODY>
</HTML>

Для тестирования апплета с помощью appletviewer.exe требуется
создать минимальный HTML файл:
Code:
<APPLET CODE="HelloJava.class" WIDTH=400 HEIGHT=300>
</APPLET>

Назовём его например example.htm. Тогда для запуска апплета
HelloJava требуется в командной строке записать
appletviewer example.htm и исполнить.

Чтобы показать отличие апплетов от автономных программ я
приведу два примера:
Code:
import java.awt.*;
import java.applet.*;

public class HelloJava extends Applet
{
   public void paint (Graphics g)
   {
      g.drawString ("Hello, Java !",5,10);
   }
}

Code:
class HelloJava
{
   public static void main (String args[])
   {
      System.out.println ("Hello, Java !");
   }
}

Итак апплет - это класс, расширяющий класс Applet, а автономная
программа - класс, имеющий метод main.

Разберём текст примеров. Первые две строки - это
команды import. С помощью них вы сообщаете компилятору о том,
какие классы вы будете использовать в своей программе.
Стандартная библиотека классов, как я уже говорил, находится в
подкаталоге LIB в файле classes.zip. Если заглянуть в него, то
можно увидеть иерархию классов:
Code:
java ──┬── applet ── ...
       ├── awt ──────────┬── Font.class
       ├── io ────── ... ├── Graphics.class
       ├── lang ──── ... └...
       ├── net ───── ...
       └── util ──── ...
sun ───┬── ...
       └ ...

Например, если в программе вы используете объекты классов
Image и Graphics, можно написать:

import java.awt.Font;
import java.awt.Graphics;

или проще:

import java.awt.*;

или можно поставить полное имя класса в тексте программы:
Code:
public class HelloJava extends java.applet.Applet
{
   public void paint (java.awt.Graphics g)
   {
      g.drawString ("Hello, Java !",5,10);
   }
}

С помощью ключевого слова extends реализуется наследование.
В Java нет множественного наследования - у класса может быть
только один родительский класс. Родительский класс в Java
называется суперклассом, а дочерний класс - подклассом.
Функции описываются внутри класса, функция paint является
стандартным методом апплета и вызывается, когда требуется
перерисовать окно апплета. Ключевое слово public означает, что,
в одном случае, класс является общедоступным, а в другом - метод
класса является общедоступным.

Изменим код апплета:
Code:
import java.awt.*;
import java.applet.*;

public class HelloJava2 extends Applet
{
   public void paint (Graphics g)
   {
      Font font = new Font("TimesRoman", Font.BOLD, 24);
      g.setFont (font);
      g.drawString ("Hello, Java !",5,10);
   }
}

Здесь можно увидеть как создаётся объект какого-то класса.
В классе должен быть описан соответствующий конструктор.
Обратите внимание на константу Font.BOLD - в Java константы
класса также описываются внутри класса следующим образом:

public static final int BOLD = 1;

Слово public означает, что BOLD является доступным.
Слово static означает, что BOLD единственный для всех объектов
класса. Слово final означает, что BOLD не будет меняться.
И int - тип, BOLD - имя.

В Java отсутствуют указатели и адресная арифметика.
Однако запись Graphics g означает, что объект передаётся по
ссылке. По ссылке в Java передаются объекты классов и массивы. По
значению передаются только переменные стандартных типов.

В Java стандартными являются те же типы, что и в С++, но
есть некоторые отличия:
- добавлен тип boolean (true,false);
- добавлен тип byte (от -128 до 127);
- тип char является 16-битным (unicode);
- тип int является 32-битным;
- тип long является 64-битным.

Массивы в Java выделяются также как и объекты - с
помощью слова new: int a[] = new int[100]; Следует отметить,
что выделенную таким способом память освобождать не нужно -
после того, как на эту область памяти перестанет что-либо
ссылаться, она будет освобождена сборщиком "мусора".

Из библиотечных классов наиболее употребимым является
класс String. Строки в Java можно складывать:
String s1 = "aaa";
String s2 = "bbb " + s1 + " ccc";

Интересно, что в выражение со строками можно записывать
переменные других типов:
int i = 10;
double d = 3.14;
String s3 = "i=" + i + "d=" + d + "100=" + 100;

Это вызвано тем, что каждому простому типу данных
соответствует библиотечный класс. Например типу char
соответствует класс Character, типу int - Integer, типу float -
Float и т.д. В каждом из этих классов есть метод toString(),
приводящий тип к строке.

Вообще метод toString() есть в каждом библиотечном
классе - в сложных объектах в строку выводятся только основные
параметры.

В языке Java неявным предком всех объектов считается
класс Object, в котором есть простейшая реализация метода
toString().

_________________
:dj: https://mastodon.social/@Shaos


30 Apr 2011 19:28
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22517
Location: Silicon Valley
Reply with quote
Post 
К концу 2000 года конспект лекций выглядел уже вот так:

http://nedopc.org/nedopc/upload/shaos/java2000.pdf (122K)

Кое-какие главы пропущены - там просто зачитывались материалы из других источников (например про сравнение C++ и Java см. тут, а про графику/файлы/сеть см. у Фроловых тут).
Позже я ещё давал сервлеты, которые в этом документе никак не отражены.

_________________
:dj: https://mastodon.social/@Shaos


30 Apr 2011 20:40
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Когда я сам начинал работать с Java мне очень помогли материалы Картузова А.В. :
Программирование на языке JAVA

http://www.mstu.edu.ru/study/materials/java/index.htm

Мне понравились краткость изложения и хорошее оформление в виде
справочника с примерами.

Считаю, что людям, пришедшим в JAVA не с нуля, лоховские примеры
типа Hello, Java ! весьма портят настроение при освоении, как впрочем
Hello, World ! в остальных языках. Этот пример уместен на информатике
в школе, после чего он своим тупизмом злит. Кто смог осилить PRINT "Hello, World !"
на языке для начинающих справится с этим и на других
языках, как бы они не уродовали оператор PRINT. :wink:

Погуглил - г-н Картузов за это время уже выпустил всё в виде книги:

[img]http://padabum.com/info/Компьютерная%20литература/А.В.Картузов%20-%20Программирование%20на%20языке%20Java.jpg[/img]

http://bookz.ru/authors/kartuzov-av/kartuzovav01.html
http://www.twirpx.com/file/12493/
http://padabum.com/d.php?id=2188
Можно вынести в Книги и пресса (REG).

А вот Shaos этот момент со своими лекциями как-то за 13 лет пролопушил -
даже методички под эгидой УПИ не издал. :-?


01 May 2011 05:57
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22517
Location: Silicon Valley
Reply with quote
Post 
Не скажи - "Hello, World" сильно помогает въёхать в язык быстро. Кроме того его можно использовать для характеристики монструозности языка - если это 3 строчки, то язык вменяем, а если 300 - лучше не надо тратить на этого монстра своё время (преркасный тому пример - WinAPI).

Методичку издавать как-то не приходило в голову (да и не просил никто) - материалы всё равно по большей части не мои были...

_________________
:dj: https://mastodon.social/@Shaos


01 May 2011 06:05
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
если это 3 строчки, то язык вменяем

Хы... послушав тебя можно сказать ВАСИК - самый вменяемый язык,
всего 1 строчка:
PRINT "Hello, World !"
ВАСИК крут? :D

Shaos wrote:
Методичку издавать как-то не приходило в голову - материалы всё равно по большей части не мои были...

Безусловно не твои. Твой "язык боевых роботов" пока ещё не внесли в программу
ВУЗов. :lol:
Но как я помню - "препод обязан преломить изучаемый материал через себя
и донести до учащихся в самой доступной форме
" - в этом смысл лекций,
методичек и учебников, а вовсе не в пересказе материалов, скажем, от
Сан Микросистемз. :wink:


01 May 2011 06:16
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22517
Location: Silicon Valley
Reply with quote
Post 
Lavr wrote:
Shaos wrote:
если это 3 строчки, то язык вменяем

Хы... послушав тебя можно сказать ВАСИК - самый вменяемый язык,
всего 1 строчка:
PRINT "Hello, World !"
ВАСИК крут? :D


А после HelloWorld нужно копать дальше - и уже по общей картине судить о крутости языка ;)

_________________
:dj: https://mastodon.social/@Shaos


01 May 2011 06:19
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos - ты не подумай, что я тебя "ткнуть" хотел, когда говорил про издание лекций,
просто тут момент очень интересный.

Когда я от Java переходил к J2ME, то кроме ХТМЛ-Хелпа читал следующие книжки:
"Платформа программирования j2me для портативных устройств", автор Вартан Пирумян:
http://untrance.podvodnik.tv/docs/vartan.chm

"Программирование мобильных телефонов на Java2 Micro Edition", автор Горнаков С.:
http://untrance.podvodnik.tv/docs/gornakov.djv

"Пишем программы и игры для сотовых телефонов", автор Буткевич Е.Л.:
http://untrance.podvodnik.tv/docs/butkevitch.pdf

Пирумян - книга очень тяжеловатая для чтения, фактически справочник,
с Буткевича я начал, он занимателен, но кое-где "тумана" напускает -
не находишь ответа, почему это так, а не иначе...
Горнаков - самый понятный, и я его даже купил через книгу-почтой из-за
диска с софтом и программами.
Так вот г-н Горнаков - он помоложе нас с тобой выходит, если я правильно
помню, да и уровень изложения - средний, как и помечено в книжке,
ан - смотри же! - издал и раскупалось.
Хороша, наверно ложка к обеду. Сейчас, к примеру, мне кроме ХТМЛ-Хелпа
особо то и ничего не надо. А тогда - особого и выбора-то не было в плане
литературы.


01 May 2011 07:17
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22517
Location: Silicon Valley
Reply with quote
Post 
Покопал архивы - я с джавой начал ковыряться в декабре 1996 года - т.е. в том же году когда она появилась ;)
P.S. А на C/C++ я перешёл с паскаля в январе 1994 года

_________________
:dj: https://mastodon.social/@Shaos


03 May 2011 10:04
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos, а что действительно в Java под Unicode код клавиши <Enter>=0Ah?
Специально написал тест кодов клавиатуры - кодом 0Dh отзываются только
сочетания <Ctrt>+<ь>, <R_Alt>+<ь>, <Ctrt>+<m>, <R_Alt>+<m>. Отдельной
клавиши с таким кодом вроде как и нет. :-?


04 May 2011 15:21
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22517
Location: Silicon Valley
Reply with quote
Post 
Lavr wrote:
Shaos, а что действительно в Java под Unicode код клавиши <Enter>=0Ah?
Специально написал тест кодов клавиатуры - кодом 0Dh отзываются только
сочетания <Ctrt>+<ь>, <R_Alt>+<ь>, <Ctrt>+<m>, <R_Alt>+<m>. Отдельной
клавиши с таким кодом вроде как и нет. :-?


да - похоже Java под KeyEvent.VK_ENTER подразумевает 0x0A ('\n')

_________________
:dj: https://mastodon.social/@Shaos


04 May 2011 17:33
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos - если тебя не затруднит как-то взглянуть под никсами: не проходит в апплет
код от клавиши <Tab>. Ну я бы ещё понял: <Alt>+<Tab>, и в оригинале
исходников код от <Tab> юзают, но под Вендой он не срабатывает. :(
Есть предположение, что это зависит от ОС, хотя JAVA вроде как и независима.
http://www.nedopc.org/forum/viewtopic.php?p=89293#89293

PS. Такое ощущение что <Tab> - перносит фокус ввода в апплете и до кода апплета он не доходит.


13 May 2011 03:09
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Братья Фроловы wrote:
Нельзя сказать, что звуковые возможности аплетов Java чрезмерно велики. Скорее наоборот, они минимальны. Тем не менее, аплеты могут проигрывать звуковые клипы, записанные в файлах формата AU, который пришел из мира компьютеров фирмы Sun.

http://www.podgoretsky.com/ftp/Docs/Java/Frolov/vol14/ch1.html

И это всё? И нет какого хитрого способа или программного трюка придать звучание
«Специалист-у» на Java?
http://www.nedopc.org/forum/viewtopic.php?t=9475&start=45


18 May 2011 15:02
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22517
Location: Silicon Valley
Reply with quote
Post 
А что в никсах - у меня тут тот же фаерфокс с той же сановской джавой...

P.S. Проверил вот на этой страничке:
http://www.nedopc.org/nedopc/zx/zxjava1.shtml
по табу фокус перескакивает с апплета куда-то в другое место
Хотя вот тут:
http://www.ternary.info/ternary/java.php?applet=4
по табу оно скачет по элементам управления

_________________
:dj: https://mastodon.social/@Shaos


18 May 2011 18:08
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22517
Location: Silicon Valley
Reply with quote
Lavr wrote:
Братья Фроловы wrote:
Нельзя сказать, что звуковые возможности аплетов Java чрезмерно велики. Скорее наоборот, они минимальны. Тем не менее, аплеты могут проигрывать звуковые клипы, записанные в файлах формата AU, который пришел из мира компьютеров фирмы Sun.

http://www.podgoretsky.com/ftp/Docs/Java/Frolov/vol14/ch1.html

И это всё? И нет какого хитрого способа или программного трюка придать звучание
«Специалист-у» на Java?
http://www.nedopc.org/forum/viewtopic.php?t=9475&start=45


посмотри пакет javax.sound.sampled

_________________
:dj: https://mastodon.social/@Shaos


18 May 2011 18:14
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
А что в никсах - у меня тут тот же фаерфокс с той же сановской джавой...

P.S. Проверил вот на этой страничке:
http://www.nedopc.org/nedopc/zx/zxjava1.shtml
по табу фокус перескакивает с апплета куда-то в другое место
Хотя вот тут:
http://www.ternary.info/ternary/java.php?applet=4
по табу оно скачет по элементам управления

В исходниках, на которые я опираюсь, местами есть пометки - "в никсах" - не возвращает длину файла, "в никсах" - работает по-другому, поэтому решение такое неуклюжее, и т. д. - поэтому спросил.
Код ТАБ - используют, а он кода не даёт... мож авторы под никсами работали... :-?

Shaos wrote:
посмотри пакет javax.sound.sampled

Спасибо - гляну...


19 May 2011 01:46
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 51 posts ]  Go to page 1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 13 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.