Михаил Шохирев - Язык программирования Perl
Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Язык программирования Perl"
Описание и краткое содержание "Язык программирования Perl" читать бесплатно онлайн.
Курс знакомит с языком программирования Perl, с его принципами, основными возможностями и особенностями в объёме, достаточном, чтобы начать разрабатывать прикладные и системные задачи, включая программирование для сети Интернет.
Расчитанный на полугодовое изучение, курс является достаточно подробным введением в язык программирования Perl. Описывается уникальная культура Perl и особенности, отличающие его от других языков программирования и во многом обусловившие его популярность. Рассматриваются основные средства программирования на языке Perl версии 5.8. Разбираются богатые возможности языка для создания самых разных приложений, а также особый стиль программирования на Perl. Курс ориентирован на студентов, начинающих программистов или разработчиков, применяющих другие языки и желающих писать прикладные или системные программы на Perl.
Из примера видно, что имя класса может быть составным, отражая иерархию классов. Поскольку классы - это пакеты, хранящиеся в файле-модуле, то все, что говорилось в предыдущей лекции об именовании модулей, относится и к классам.
Обратите также внимание на то, что конструктор класса Private::Person определен так, что он может вызываться с использованием либо имени класса, либо ссылки на существующий объект. Это проверяется в следующей строке:
my $class = ref($invocant) || $invocant;
Если первым аргументом передана ссылка на объект, то определяется имя его класса, иначе считается, что передано имя класса. Поэтому в программе можно создавать однотипные объекты, обращаясь к методу new() существующего объекта. Например, так:
my $hobbit = Private::Person->new; # вызов с именем класса $hobbit->name("Bilbo Baggins"); my $frodo = $hobbit->new; # вызов со ссылкой на объект $frodo->name("Frodo Baggins");
В классе могут быть определены методы, не предназначенные для работы с конкретными объектами. Такие методы называются методами класса или статическими методами. Для обращения к ним, так же как для обращения к конструктору, используется имя класса, а не ссылка на объект. Часто эти методы обслуживают данные, общие для всех объектов класса (то есть объявленные глобально на уровне класса). Подобные данные называются атрибутами класса. В качестве примера опишем класс Magic::Ring, где метод класса count() будет использоваться для доступа к значению атрибута класса $Magic::Ring::count, в котором будет храниться количество созданных волшебных колец.
package Magic::Ring; # класс "Магическое Кольцо" sub new { # конструктор my ($class, $owner) = @_; # имя класса и значение атрибута $Magic::Ring::count++; # сосчитать новое Кольцо bless({owner => $owner}, $class); # "благословить" хэш } sub owner { # метод чтения и записи атрибута owner my $self = shift; # извлечь ссылку на объект $self->{owner} = shift if @_; # изменить значение атрибута return $self->{owner}; # вернуть значение атрибута } $Magic::Ring::count = 0; # атрибут класса: число Колец sub count { # метод класса return $Magic::Ring::count; } 1; # конец описания класса Magic::Ring
В программе, использующей класс Magic::Ring, создается набор объектов. При каждом обращении к конструктору увеличивается счетчик созданных магических колец $Magic::Ring::count.
package main; use Magic::Ring; # использовать класс "Магическое Кольцо" my @rings = (); for (1..3) { # "Три кольца - премудрым эльфам..." push @rings, new Magic::Ring('эльф'); } for (1..7) { # "Семь колец - пещерным гномам..." push @rings, new Magic::Ring('гном'); } for (1..9) { # "Девять - людям Средиземья..." push @rings, new Magic::Ring('человек'); } # "А Одно - всесильное - Властелину Мордора..." push @rings, new Magic::Ring('Саурон'); # Сколько всего было сделано колец? print Magic::Ring->count, "\n"; # будет выведено: 20
В стандартную библиотеку модулей Perl входит модуль Class::Struct, который облегчает жизнь программистам по описанию классов, предоставляя для объявления класса функцию struct(). Эта функция генерирует описание класса в указанном пакете, включая методы для доступа к атрибутам класса. Причем помимо имени атрибута она позволяет задавать его тип с помощью разыменовывающего префикса: скаляр ($), массив (@), хэш (%), ссылка на подпрограмму (&) или объект. Насколько просто и удобно пользоваться функцией struct, можно судить по такому примеру:
use Class::Struct; # подключаем стандартный модуль # описываем класс Performer ("Исполнитель") struct Performer => { # атрибуты класса: name => '$', # "имя" - скаляр country => '$', # "страна" - скаляр artists => '%', # "артисты" - хэш }; my $performer = new Performer; # создаем исполнителя $performer->name('Pink Floyd'); # задаем значения атрибутов $performer->country('Great Britain'); # заполняем атрибут-хэш: $performer->artists('David Gilmour', 'гитары, вокал'); $performer->artists('Roger Waters', 'бас-гитара, вокал'); $performer->artists('Nick Mason', 'ударные'); $performer->artists('Richard Wright', 'клавишные'); # описываем класс Album ("Альбом") struct Album => { # атрибуты класса: title => '$', # "название" - скаляр year => '$', # "год выхода" - скаляр tracks => '@', # "композиции" - массив performer => 'Performer', # "исполнитель" - объект }; my $album = Album->new; # создаем альбом $album->title('Dark Side of the Moon'); $album->year(1973); # заполняем атрибут-массив: $album->tracks(0, 'Breathe'); $album->tracks(1, 'Time'); # и так далее... $album->performer($performer); # задаем атрибут-объект
Чтобы добавить к полученному описанию класса дополнительный метод, достаточно описать его в соответствующем пакете. Вот пример добавления метода Album::print и его использования в главной программе:
package Album; # переключаемся на нужный пакет sub Album::print { # и описываем дополнительный метод my $self = shift; printf("%s '%s' (%d)\n", $self->performer->name, $self->title, $self->year); foreach my $artist (keys%{$self->performer->artists}) { printf("\t%s - %s\n", $artist, $self->performer->artists($artist)); } } package main; # переключаемся на основную программу $album->print; # и вызываем метод объекта
В заключение рассмотрим несколько распространенных приемов для работы с классами и объектами.
Функции bless() не обязательно передавать имя класса: если второго аргумента нет, она помечает объект ссылки именем текущего пакета. Поскольку bless() возвращает значение своего первого аргумента, а подпрограмма возвращает последнее вычисленное значение, то минимальный конструктор может выглядеть так:
sub new { # конструктор экземпляров класса my $self = {}; # контейнер для атрибутов объекта bless($self); # "благословить" объект ссылки } # и вернуть ссылку (1-й аргумент bless)
При создании объекта удобно сразу задавать начальные значения его атрибутов, передавая аргументы конструктору. Если для инициализации атрибутов использовать хэш, то атрибуты можно задавать в любом порядке, а в конструкторе можно определить значения по умолчанию для незаданных атрибутов. Например, так:
my $language = Programming::Language->new( NAME => 'Perl', # имя VERSION => '5.8.7', # версия AUTHOR = 'Larry Wall' # автор );
Весьма полезно иметь в классе метод, который преобразовывает значения атрибутов объекта в строку. Такой метод обычно называется as_string() или to_string() и может применяться для отладочной печати состояния объекта. А если его определить в классе-"прародителе", то его можно будет применять к объектам всех унаследованных классов. Если использовать анонимный хэш для хранения значений атрибутов, то такой метод может выглядеть так:
sub to_string { # преобразование значений атрибутов в строку my $self = shift; my $string = '{ '; foreach (keys %{$self}) { $string .= "$_: '$self->{$_}' "; } $string .= '}'; return $string; }
Благодаря тому, что Perl - это динамический язык, в нем легко создать класс, в котором свойства объектов добавляются во время выполнения программы. Для этого в классе описываются универсальные методы для работы со свойствами объекта, а затем в ходе выполнения задаются нужные свойства. Например, так:
package Human; # класс "Человек" our @ISA = qw(Person); # это подкласс класса Person use Person; sub set { # универсальный метод изменения атрибутов объекта my ($self, $name, $new_value) = @_; my $old_value = $self->{$name}; $self->{$name} = $new_value; return $old_value; } sub get { # универсальный метод доступа к атрибутам объекта my ($self, $name) = @_; return $self->{$name}; } 1; package main; # главная программа use Human; # подключить класс my $hero = Human->new; # создать героя-человека $hero->set ('имя', 'Арагорн'); # дать ему имя $hero->set ('оружие', 'меч'); # и вооружить
В этой лекции мы научились работать с объектами. Объектный подход реализован в Perl весьма своеобразно, но понятно и эффективно. Использование этой технологии дает программисту возможность создавать приложения, соответствующие современным требованиям. А сочетание объектного программирования с динамической природой языка позволяет реализовывать оригинальные и эффективные решения.
Лекция 15. Работа с базами данных
В этой лекции разговор пойдет о программировании баз данных на языке Perl и о средствах взаимодействия с системами управления базами данных, которые имеются в Perl. Основное внимание будет уделено DBI - универсальному интерфейсу доступа к базам данных.
Цель лекции: узнать о средствах работы с базами данных в Perl и научиться применять их в своих программах для доступа к разным типам баз данных - от автономных таблиц до серверов баз данных.
Давно прошли те времена, когда информация хранилась только в простых "плоских" файлах (flat files) в двоичном и текстовом виде. Эволюция систем обработки данных привела к появлению многочисленных баз данных (БД), хранящих информацию в собственных форматах. Основное отличие базы данных от обычного файла с данными заключается в том, что база данных, помимо пользовательской информации, также содержит метаданные, описывающие хранимые в ней сведения. Для работы с большими объемами информации были созданы системы управления базами данных (СУБД), которые теперь работают на серверах баз данных, в настольных и переносных компьютерах - от ноутбуков до карманных компьютеров. Сейчас в большинстве СУБД используются реляционные базы данных, состоящие из таблиц с фиксированным набором колонок (столбцов) и переменным числом строк (записей). Для манипулирования информацией в реляционных базах данных применяется структурированный язык запросов SQL (Structured Query Language). SQL является международным стандартом и поддерживается в большем или меньшем объеме всеми производителями СУБД. Но в последнее время с ними все больше конкурируют объектно-ориентированные и документальные базы данных (например, хранящие информацию в формате XML). Естественно, любая современная система программирования не может обойтись без средств доступа к базам данных. В Perl есть несколько способов работы с базами данных, и мы рассмотрим основные из них: ассоциативные массивы, таблицы-объекты и реляционные базы данных. Примеры работы с базами данных будут основаны на информации о моллюсках, производящих жемчужины (перлы). Каждая запись базы данных будет содержать такие сведения:
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Язык программирования Perl"
Книги похожие на "Язык программирования Perl" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Михаил Шохирев - Язык программирования Perl"
Отзывы читателей о книге "Язык программирования Perl", комментарии и мнения людей о произведении.