�A�X�y�N�g�w���v���O���~���O �I�[�o�[�r���[�FThe Rational Edge �i24�j

�{�L����Pollice���́A�A�X�y�N�g�w���v���O���~���O�iAOP�j�̊T�v�������AAOP�̏������A���̏��������������邽�߂ɕK�v�Ȃ��́A����т���ɔ��������Q�ɂ‚��ďq�ׂĂ���B

» 2004�N04��13�� 12��00�� ���J
[Gary Pollice�iWorcester Polytechnic Institute�j�C��IT]
ALT �{�L���́AIBM developerWorks����A�b�g�}�[�N�E�A�C�e�B�������𓾂Ė|��A�]�ڂ������̂ł��B

�@���z�I�Ȑ��E�ł́A�\�t�g�E�F�A�̍�蒼���ȂǂƂ�����Ƃ͑��݂��Ȃ����낤�B�����炭�A�K�؂ȃI�u�W�F�N�g�E���f�����ŏ����瓾���A�E�H�[�^�[�t�H�[���^�̊J���A�v���[�`�����܂��@�\���邾�낤�B�������߂������ȁA����ꂪ�Z��ł���̂͗��z�I�Ȑ��E�ł͂Ȃ��B���̂��߁A�\�t�g�E�F�A�E�V�X�e�����\�z���邽�߂̂��悢���@����ɖ͍����Ă���̂ł���B

�@�����͌����I�ɁA���ׂĂ̏󋵂ɑ΂��ēK�؂ȃv���Z�X�A��@�A����A�v���b�g�t�H�[���Ȃǂ����݂��Ȃ����Ƃ�F�����Ă���B�����炱���A�c�[���̃��p�[�g���[���L���āA���ʂȃc�[�����@���K�v�ɂȂ����Ƃ��ɂ����ɂ����𗘗p�ł���悤�ɏ������Ă���̂ł���B���̋ƊE�i�������IT�ƊE���j�̗��j�́A��������A�\�����v���O���~���O�A�I�u�W�F�N�g�w���A�v���[�`�̓�������A�X�p�C�����^�┽���^�̊J���Ɏ���܂ŁA�\�t�g�E�F�A�\�z�A�v���[�`�̉��ǂ̗��j�ł�����B���̃��C���A�b�v�ɍŋ߉�������̂��A�A�X�y�N�g�w���v���O���~���O�iAOP�Faspect-oriented programming�j�ł���BAOP�́A�A�X�y�N�g�w���\�t�g�E�F�A�J���iAOSD�Faspect-oriented software development�j��1�‚̑��ʂ�\���B���̃R�����ł�AOP�̊T�v�������AAOP�̏������A���̏��������������邽�߂ɕK�v�Ȃ��́A����ɔ��������Q�ɂ‚��Đ�������B�܂��A�����ł͂��邪AOSD�ɂ‚��Ă���������B

�� AOP�Ƃ͉����H

�@AOP�Ƃ����T�O�͐V�������̂Ɏv���邩������Ȃ����A���ۂɂ͈ȑO���瑶�݂��Ă������̂ł���BAOP�Ɋւ��č������p�ł���m���͑����̐l�X�̍v���ɂ����̂ł���A�e�l�����̑n�n�҂ł���Ǝ咣���邱�Ƃ��ł���B�������A��ʓI��AOP�ƍł��֘A�̐[���l����Gregor Kiczales���ł���B���݁A�ނ�British Columbia��w�Ń\�t�g�E�F�A�̃��W���[�����Ɋւ��錤���ɏ]�����Ă���BKiczales���́A1984�N����1999�N�܂�Xerox Palo Alto Research Center�iPARC�j��AOP�̌����Ɏ��g�݁AAOP�̎����ɂ�������l�҂ł������B

�@AOP���������ł��悢���@�́A����������Ƃ��낤�B�����ł́A���Ȃ�����K�͂ȃ\�t�g�E�F�A�E�V�X�e����ێ炷�闧��ɂ���Ɖ��肵�悤�B���̃V�X�e���́A��������g�D�̋��^�v�Z�Ɛl���̋@�\���Ǘ�����B�����ŁA�]�ƈ��f�[�^�ɑ΂���ύX�����ׂă��O�ɋL�^����悤�Ɍo�c�ґ�����v�����ꂽ�Ƃ�����ǂ����邩�B����ɂ́A�����A�����A�c�Ǝ蓖�ȂǁA���^�v�Z�Ɋւ���ύX���܂܂��B�܂��A�]�ƈ��̌�������l�f�[�^�ȂǁA�]�ƈ��̂�������Ɋւ��邠����ύX���܂܂��B���̗v���𖞂����ɂ́A�ǂ�������悢���낤���B

�@�����̐l�́A�ق��ɂ悢���@���v���t���Ȃ����߁A�R�[�h���𒲂ׂāA�K���ȏꏊ�Ƀ��M���O�E���\�b�h�̌Ăяo����}�����邾�낤�B�V�X�e�����K�؂ɐ݌v����A�쐬����Ă���΁A�R�[�h�ɉ�����ύX�͐��J�������ōςށB�����������̃V�X�e���ł́A�����̏ꏊ�ɂ��̂悤�ȑ}�����K�v�ɂȂ�B�I�u�W�F�N�g�w���V�X�e���ł���΁A���M���O�E�N���X���쐬���A���̃C���X�^���X���g�p���ă��M���O���s���B���܂��܂ȃt�@�C����f�[�^�x�[�X���������߂ɁA�����̊K�w�̃N���X���K�v�ȏꍇ������B���̂悤�ȕ��@�ŗv���𖞂������Ƃ���̂͗e�Ղȍ�Ƃł͂Ȃ��A�K�v�ȑ}�����m���ɍs����悤�ɕۏ؂��邱�Ƃ͍���ł���B

�@���Ƃ��A�D�ꂽ�I�u�W�F�N�g�w���V�X�e���̎������Ȃ���Ă����Ƃ��Ă��A�����‚��̖��ɒ��ʂ��邱�ƂɂȂ邾�낤�B�wMastering AspectJ�x�̒���Joseph D. Gradecki����Nicholas Lesiecki���́A�I�u�W�F�N�g�w���V�X�e���ł́A�ύX����̂�����ȃN���X��ė��p�ł��Ȃ��R�[�h���쐬����邱�Ƃ������A�V�X�e�����g���[�X����̂�����i�‚܂�A�I�u�W�F�N�g�Ԃ̃��b�Z�[�W�����ɑ������߁A�R�[�h�̘_���X���b�h��ǂ��̂�����ł���j�Ǝw�E���Ă���i��1�j�B

�� ���f�I�֐S���icross-cutting concerns�j

�@���̗�ŗv������郍�M���O�@�\�́A���f�I�֐S���icross-cutting concern�j�ł���B�‚܂�A�V�X�e���S�̂ɂ������@�\�ł���A�V�X�e���̂��܂��܂ȏꏊ�ŕύX�����M���O���Ȃ���΂Ȃ�Ȃ����߁A1�‚�2�‚̓���̃N���X�Ƀ��M���O�@�\�𕪗��i�J�v�Z�����j���邱�Ƃ͂ł��Ȃ��̂ł���B�����̊�]�́A�V�X�e����ێ炪�e�Ղȏ�Ԃɕۂ‚��Ƃł���A���̂��߁A�R�[�h���ł��邾���Ȍ��ɕۂ��Ȃ��烍�M���O�������������Ƃ������Ƃ��B�܂��A�V�X�e���̃A�[�L�e�N�`���ɑ΂��č\����̑傫�ȕύX�������邱�Ƃ͔��������B�����Ȃ�ƁA���M���O�̂悤�ȉ��f�I�֐S�����ǂ̂悤�Ɏ���������悢�̂��낤���B���M���O���s���N���X���쐬���A�K���ȑ}�����s�����Ƃɂ���āA���ׂẴR�[�h�����t�@�N�^�����O���邱�Ƃ͉”\�ł��邪�A��K�̓V�X�e���ł́A���Ɏ��Ԃ�������A�G���[�̔������₷����ƂƂȂ��Ă��܂��B

�@AOP�́A���̂悤�ȉ��f�I�֐S����\�����A�������V�X�e���Ɏ����I�ɑg�ݍ��ނ��߂̃��J�j�Y���ł���A�X�y�N�g�iaspect�j��񋟂��邱�Ƃɂ���āA���f�I�֐S������������悤�ɐ݌v����Ă���BAOP�́A�����̃v���O���~���O�̃p���_�C���⌾����u�u��������v���̂ł͂Ȃ��A�����Ɓu�A�g�v���ĕ\���͂�L�p�������コ���邽�߂̂��̂ł���BAOP�𗘗p����ƁA�֐S���̕����iseparation of concerns�j�����K�؂ɕ\���ł���B����́A�ێ炪�e�Ղȃ\�t�g�E�F�A�E�V�X�e����K�؂ɐ݌v���邽�߂ɕK�v�ł���B�ꕔ�̊֐S���́A�J�v�Z�������ꂽ�I�u�W�F�N�g�A���Ȃ킿�R���|�[�l���g�Ƃ��ēK�؂ɕ\������A����ȊO�̊֐S���͉��f�I�֐S���Ƃ��ēK�؂ɕ\�������B

�� AspectJ�ł̃��M���O�̗�

�@�����������M���O�̖��ɂ‚��čl���A���ꂪAspectJ�ɂ���Ăǂ̂悤�ɉ�������邩�����Ă݂悤�BAspectJ�Ƃ́AJava������g������AOP�̎����̂��ƂŁA�����炭AOP�̎����Ƃ��Ă͍ł��L���ŁA�ł��L���g���Ă�����̂ł���B�����A�ǎ҂�Java����ɐ��ʂ��Ă��Ȃ��Ƃ��Ă��A���ꂩ����������v�ȊT�O�ɂ‚��Ă͗����ł���͂��ł���B

�@���L�̐}�i�]�ƈ����̍X�V�Ɋ֌W����N���X�j�́A�V�X�e���̕ύX����������1�‚̕��@�������Ă���BFinance�V�X�e���ɂ́A�]�ƈ��̉�v�f�[�^���X�V���邽�߂̂����‚��̃��\�b�h��1�‚̃C���^�[�t�F�C�X������B�����̃��\�b�h���͂��ׂāuupdate�v�Ŏn�܂�i�Ⴆ��updateFederalTaxInfo�j�A�e���\�b�h�͈����Ƃ���Employee�I�u�W�F�N�g�����B �܂��A�]�ƈ��̐l�����́A�}�Ɏ����ꂽEmployee�I�u�W�F�N�g�̃��\�b�h���g���čX�V�����B

ALT �} �]�ƈ����̍X�V�Ɋ֌W����N���X

�@�����ʼn������Ȃ���΂Ȃ�Ȃ����𕶏͂ŋL�q����ƁA���̂悤�ɂȂ�B�C�ӂ̍X�V���\�b�h���Ăяo���A���̍X�V�������������邽�тɁA���M���O�E���b�Z�[�W���o�͂���B�b���ȒP�ɂ��邽�߂ɁA���M���O�E���b�Z�[�W��W���o�͂ɏo�͂���B���ۂ̃V�X�e���ł́A���O�E�t�@�C���ɏo�͂��邱�ƂɂȂ邾�낤�BAspectJ���g���Ă��̃\�����[�V��������������ɂ́A����3�‚̃X�e�b�v���K�v�ł���B

  1. �R�[�h���Ƀ��M���O�E�R�[�h��}������ꏊ�����ʂ���BAspectJ�ł́A������u�����_�̒�`�v�ƌĂ�
  2. ���M���O�E�R�[�h���L�q����
  3. �V�����R�[�h���R���p�C�����A�V�X�e���ɓ�������

�@�e�X�e�b�v�ɂ‚��āA����3�‚̃Z�N�V�����ŏڂ�����������B

�� �����_�̒�`

�@�����_�ijoin point�j�Ƃ́A�����̊֐S�����A�v���P�[�V�����ƌ�������A�R�[�h���̓K�؂ɒ�`���ꂽ�|�C���g�̂��Ƃł���B��ʓI�ɁA���ꂼ��̊֐S���ɂ‚��đ����̌����_�����݂���B�����_��1�‚�2�’��x�ł���΁A��J�����Ɏ��ƂŃR�[�h��ύX�ł���B

�@AspectJ�ł́A�����_���|�C���g�J�b�g�ipointcut�j�Ƃ��ăO���[�v�����邱�Ƃɂ���āA�����_���`����iAspectJ�̍\���͖L�x�ł���A�����ł͂��̂��ׂĂɂ‚��Ă͐������Ȃ��j�B�܂����߂ɁA2�‚̃|�C���g�J�b�g���`����B1�‚�Employee�N���X���̌����_���O���[�v�����邽�߂̂��̂ł���A����1�‚�IEmployeeFinance�R���|�[�l���g���̌����_���O���[�v�����邽�߂̂��̂ł���B�������`����R�[�h�͎��̂悤�ɂȂ�B

pointcut employeeUpdates(Employee e):
        call(public void Employee.update*Info()) && target(e);
pointcut employeeFinanceUpdates(Employee e) :
        call(public void update*Info(Employee)) && args(e);

�@employeeUpdates�Ƃ������O�̍ŏ��̃|�C���g�J�b�g�́Aupdate�Ƃ���������Ŏn�܂�AInfo�Ƃ���������ŏI���A�����������Ȃ�Employee�I�u�W�F�N�g�̃��\�b�h���Ăяo���Ă��邷�ׂĂ̌����_��\���Ă���B�܂��A���̃|�C���g�J�b�g�́Atarget�w��q�ɂ���āAEmployee�N���X�Œ�`���ꂽ���\�b�h�𖾊m�Ɏw�肵�Ă���B2�Ԗڂ̃|�C���g�J�b�g�ł���employeeFinanceUpdates�́Aupdate�Ŏn�܂�AInfo�ŏI���AEmployee�^�̈�����1�Ž��”C�ӂ̃��\�b�h���Ăяo���Ă��邷�ׂĂ̌����_��\���Ă���B����2�‚̃|�C���g�J�b�g�́A��������ƁA����ꂪ�֐S������Ă��邷�ׂĂ̌����_���`����BEmployee�N���X��IEmployeeFinance�R���|�[�l���g�ɍX�V���\�b�h��lj������ꍇ�A���������K���ɏ]���Ă������A�����̃��\�b�h�̌Ăяo���������I�Ƀ|�C���g�J�b�g�Ɋ܂܂��悤�ɂȂ�B�‚܂�A�X�V���\�b�h��lj����邽�тɁA�����������M���O�E�R�[�h��lj�����K�v���Ȃ��Ȃ�̂ł���B

�� ���M���O�E�R�[�h�̋L�q

�@���M���O��������������R�[�h�́AJava�̒ʏ�̃��\�b�h�Ɠ��l�ł��邪�A�A�X�y�N�g�ƌĂ΂��V�����^�Ƃ��ċL�q����B�A�X�y�N�g�́A����̊֐S���Ɋ֘A����R�[�h���J�v�Z�������邽�߂̃��J�j�Y���ł���B�]�ƈ��̕ύX�����M���O���邽�߂̃A�X�y�N�g�̎����́A���̂悤�ɂȂ�B

public aspect EmployeeChangeLogger {
        pointcut employeeUpdates(Employee e) :
                call(public void Employee.update*Info()) && target(e);
        pointcut employeeFinanceUpdates(Employee e) :
                call(public void update*Info(Employee)) && args(e);
        after(Employee e) returning :
                employeeUpdates(e) || employeeFinanceUpdates(e) {
                System.out.println("\t>Employee : " + e.getName() +
                        " has had a change ");
                System.out.println("\t>Changed by " +
                        thisJoinPoint.getSignature());
                }
        }

�@�܂��A�A�X�y�N�g�̍\����Java�̃N���X�Ǝ��Ă��邱�Ƃɒ��ڂ��Ăق����B��ʓI�ɃA�X�y�N�g�́AJava�̃N���X�Ɠ��l�ɁA�Ɨ������t�@�C���ɋL�q�����B���̗�̂悤�ɁA�ȑO�ɒ�`�����|�C���g�J�b�g���A�X�y�N�g�̃R�[�h�Ɋ܂߂�̂���ʓI�ł��邪�A�����_���܂�ł���R�[�h�̋߂��ɂ������܂߂邱�Ƃ��ł���B

�@�|�C���g�J�b�g�̌�ɂ́A�ʏ��Java�R�[�h�̃��\�b�h�Ǝ����R�[�h�E�Z�N�V�����������B����́AAspectJ�ł̓A�h�o�C�X�iadvice�j�ƌĂ΂��B�A�h�o�C�X�ɂ́Abefore�Aafter�Aaround��3��ނ�����A���ꂼ�ꌋ���_�̑O�A�����_�̌�A�����_�̑���Ɏ��s�����B���܂��܂ȃo���G�[�V�������g���ăA�h�o�C�X���J�X�^�}�C�Y���邱�Ƃ��ł���B��̗�ł́A�����_�ɂ����čX�V���\�b�h����߂�������Ƀ��M���O���s����B����1�’��ڂ��Ăق����̂́A�A�h�o�C�X�̃w�b�_���ŃR�����i:�j�̒����2�‚̃|�C���g�J�b�g�̖��O���L�q���A������_��OR�i||�j�ł‚Ȃ��ł��邱�Ƃł���B����ɂ��A2�‚̃|�C���g�J�b�g��g�ݍ��킹�Ă���B���̂悤�Ȃ��Ƃ��ȒP�ɂł���̂́A�����̃|�C���g�J�b�g��Employee�p�����[�^�����‚���ł���B

�@�A�h�o�C�X����2�‚̃X�e�[�g�����g�́A�]�ƈ��̏�񂪕ύX���ꂽ���Ƃ��A�]�ƈ����ƂƂ��ɏo�͂���B�ύX�����]�ƈ��I�u�W�F�N�g���A�h�o�C�X�̈����Ƃ��ēn�����̂ŁA�o�͂�����e�͊ȒP�ɕύX�ł���B2�Ԗڂ̃X�e�[�g�����g�́AAspectJ��JoinPoint�N���X�𗘗p���āA���̃A�h�o�C�X�����s����Ă��錋���_���o�͂���B�A�h�o�C�X�����s�����Ƃ��ɂ͊֘A���錋���_���K������A���̌����_��thisJoinPoint�ɂ���ĎQ�Ƃł���B

�� �R���p�C���ƃe�X�g

�@���M���O�E�R�[�h���L�q�ł����̂ŁA���ɂ�����R���p�C�����A�����̃V�X�e���ɓ�������B���̗�ł́AEmployee��EmployeeFinance��2�‚̃N���X�����������B���̂ق��ɁA���̂悤��main���\�b�h�����ŠȒP�ȃe�X�g�p�N���X��p�ӂ���B

public static void main(String[] args) {
        Employee e = new Employee("Chris Smith");
        // �]�ƈ�����ύX���鏈����
        // �����ɋL�q����B
        e.updateJobInfo();
        e.updateOfficeInfo();
        EmployeeFinance.updateFederalTaxInfo(e);
        EmployeeFinance.updateStateTaxInfo(e);
        }

�@AOP�̎������g�p���Ȃ���΁A���̃R�[�h�͖��Ȃ����s�����B���̗�ł́A���ׂĂ̍X�V���\�b�h�̖{�̂�print�X�e�[�g�����g�������܂�ł���̂ŁA���̗�����s����ƁA���̂悤�ȏo�͌��ʂ�������B

Updating job information
Updating office information
Updating federal tax information
Updating state tax information

�@��`�����A�X�y�N�g���V�X�e���ɑg�ݍ��ނ��߂ɁA�A�X�y�N�g�̃\�[�X�E�R�[�h���v���W�F�N�g�ɒlj����AAspectJ�̃R���p�C���ł���ajc���g���ăr���h����B�R���p�C���͂��ꂼ��̃A�X�y�N�g���������āA�A�h�o�C�X�E�R�[�h���܂񂾃N���X�E�t�@�C�����쐬����B���ɁA�����̃N���X�E�t�@�C�����̓K�؂ȃ��\�b�h�ւ̌Ăяo�����A���̃A�v���P�[�V�����E�R�[�h�̒��Ɂu�D�荞�܂��v�BAspectJ�̌��݂̃����[�X�ł́A���̐D�荞�݁iweaving�j��Java�̃o�C�g�R�[�h�E���x���ōs���邽�߁A���ԓI�ȃ\�[�X�E�t�@�C���͐�������Ȃ��B�������AJava�̃o�C�g�R�[�h���f�R���p�C�����邱�Ƃ͉”\�ł���B

�@�M�҂͊J���p��Eclipse�‹����g�p���Ă���A�R���p�C���̌Ăяo���Ɓi�R���p�C���ւ́j�K�؂Ȉ����̈����n����AspectJ�v���O�C���ɂ���čs����BAspectJ�̃R���p�C�����g���ăv���W�F�N�g���R���p�C������ƁA���̂悤�Ȏ��s���ʂ�������B

Updating job information
        >Employee : Chris Smith has had a change
        >Changed by void employee.Employee.updateJobInfo()
Updating office information
        >Employee : Chris Smith has had a change
        >Changed by void employee.Employee.updateOfficeInfo()
Updating federal tax information
        >Employee : Chris Smith has had a change
        >Changed by void employee.EmployeeFinance.updateFederalTaxInfo(Employee)
Updating state tax information
        >Employee : Chris Smith has had a change
        >Changed by void employee.EmployeeFinance.updateStateTaxInfo(Employee)

�@����ŁA�ǂ̏]�ƈ��̏�񂪕ύX���ꂽ���A�܂����̕ύX���ǂ��ōs��ꂽ����������悤�ɂȂ����B�������A���M���O�����͂����蕡�G�Ȃ��̂ł����Ă��\��Ȃ����A��{�I�Ȏ�@�͓����ł���B

�� �A�X�y�N�g�w���e�N�m���W�͂��Ȃ��ɂƂ��ĉ����Ӗ����邩�H

�@�A�X�y�N�g�w���e�N�m���W�ɂ́A�����̐��ݓI�ȃ����b�g������B���̃e�N�m���W�́A�V�X�e�����̉��f�I�֐S�����w�肵�A�J�v�Z�������邽�߂̕��@��񋟂���B����ɂ��A�V�X�e���̔��W�ɔ����ăV�X�e�������悭�ێ炷�邱�Ƃ��”\�ɂȂ�\�\�����āA�V�X�e�����m���ɔ��W���邱�Ƃ��m�M�ł���BAOP�𗘗p����ƁA�̌n�����ꂽ���@���g���āA�����̃V�X�e���ɐV�����@�\���A�֐S���Ƃ����`�Œlj��ł���B�\����\�������ǂ��邱�Ƃɂ���āA��蒷���Ԃɂ킽���ăV�X�e�����ғ������邱�Ƃ��ł��A�V�X�e���S�̂������������ƂȂ��A���X�ɉ��ǂ������邱�Ƃ��ł���B

�@�܂�AOP�́A�i���Ǘ��̐��ƂɂƂ��ďd�v�ȃc�[���ƂȂ邾�낤�BAOP������g�p����ƁA�A�v���P�[�V�����E�R�[�h�̎ז��������ɁA�R�[�h�������I�Ƀe�X�g�ł���B���̂��߁A�s�p�ӂɃG���[�̌�����lj����Ă��܂����Ƃ��Ȃ��Ȃ�B

�@�����͌��݁AAOSD�̐��ݔ\�͂𗝉����鏉���i�K�ɂ���B���̃e�N�m���W���A����Ȃ錤���Ǝ����Ɍ����������̏\���ȗ��v�������炷���Ƃ͖��炩�Ȃ悤���B�����́A���Ƃǂꂭ�炢����΁AAOP��������I�Ɏg���ăA�v���P�[�V�������J������悤�ɂȂ�̂��낤���B���̓����͂���ɐq�˂邩�ɂ���ĈقȂ�B

�@�����܂ł́A���܂��܂ȃ����b�g�ɂ‚��Č��Ă����̂ŁA���x��AOSD�Ɋւ��郊�X�N�ƁAAOSD���\�t�g�E�F�A�J���̎嗬�ƂȂ邽�߂ɕK�v�Ȃ��̂ɂ‚��čl���Ă݂悤�B

�� �i���ƃ��X�N

�@AOSD��i���̊ϓ_����Ƃ炦�AAspectJ���g���ď������ׂĂ݂����ʁA�����b�g�̂ق��ɐ��ݓI�ȃ��X�N�����݂��邱�Ƃ����������B�����ł�3�‚̖������グ��B�����́AAOSD�����y�����ꍇ�ɁA�i���Ɋւ��Ă���ꂪ���ʂ���ۑ���������̂ł���B

�@�ŏ��̖��́AAOP�ɑΉ����邽�߂Ƀv���Z�X��ύX���Ȃ���΂Ȃ�Ȃ����Ƃł���B�\�t�g�E�F�A�̌��ׂ����‚���̂ɍł��L���Ȏ�@��1�‚́A�R�[�h�̃C���X�y�N�V�����ƃ��r���[�ł���B���r���[�̍ۂɁA�v���O���}�̃`�[���̓R�[�h��_�]���A���̃R�[�h���v���𖞂����Ă��邩�ǂ����𔻒f����B�I�u�W�F�N�g�w���v���O�����ł́A�N���X���邢�͊֘A����N���X�̏W�܂�����r���[���A�����ɂ‚��Ĕ��f�������B�‚܂�A�R�[�h�𒲂ׁA���̃R�[�h���\�����ʃC�x���g��K�؂ɏ������邩�ǂ����A�_���I�Ȍ��ׂ��Ȃ����ǂ����A�Ȃǂ𔻒f����B�I�u�W�F�N�g�w���V�X�e���ł́A����̊T�O�ɂ‚��Ẵf�[�^�ƐU�镑�����A���ꂼ��̃N���X�̒��Ɋ��S�ɃJ�v�Z���������B

�@������AOP�ł́A�N���X�̃R�[�h�����������ŃN���X�ɂ‚��Ĕ��f���邱�Ƃ͂ł��Ȃ��B���̃R�[�h���A����A�X�y�N�g�̃A�h�o�C�X�ɂ���Ċg������Ă��邩������Ȃ����A���邢�̓A�h�o�C�X�ɂ���Ċ��S�ɒu���������Ă��邩������Ȃ�����ł���B�A�v���P�[�V�����̃R�[�h�ɂ‚��Ĕ��f�ł���悤�ɂȂ邽�߂ɂ́A�e�N���X�̃R�[�h�����łȂ��A���̃N���X�̐U�镑���ɉe����^���邷�ׂẴA�X�y�N�g�̃R�[�h���Q�Ƃł��Ȃ���΂Ȃ�Ȃ��B�������A���̎��_�ł́A�A�X�y�N�g�͂܂��L�q����Ă��Ȃ���������Ȃ��B�������Ƃ���ƁA�A�v���P�[�V�����E�N���X�̃R�[�h�̐U�镑����P�Ƃōl������ꍇ�A�ǂꂭ�炢���m�ɗ����ł���Ƃ����̂��낤���B

�@���́AAOP�R�[�h�̐������ɂ‚��čl������@�́A�I�u�W�F�N�g�w���v���O���~���O�iOOP�j�R�[�h�̏ꍇ�Ƌt�ł���BOOP�ł́A��������O���ւƐi�ށB�‚܂�A�N���X�ɂ‚��čl���A���̃R���e�L�X�g��z�肵�A���̌�ŃN���X�̐������ɂ‚��āA�P�Ƃ���тق��̃N���X�Ƃǂ̂悤�ɑ��ݍ�p���邩�Ƃ����ϓ_�̗������画�f����B����ɑ΂���AOP�ł́A�O����������ւƒ��ׁA���ꂼ��̌����_�ɑ΂���e�A�X�y�N�g�̉e���𔻒f���Ȃ���΂Ȃ�Ȃ��BAOP�ɂ‚��Đ��������f������@���߁A�J���҂̏����ƂȂ�K�؂ȃc�[���Ǝ�@���J�����邱�Ƃ́A���ɉ��l�̂��錤���̈�Ƃ�����B

�@�iAOP�̕��y�Ɋւ���j2�Ԗڂ̂�茻���I�Ȗ��́A�e�X�g�A���ɒP�̃e�X�g�̂��߂̃c�[���Ǝ�@�̊J���ł���B�R�[�h�̓A�X�y�N�g�ɂ���ĕύX�����”\�������邽�߁A����N���X�ɂ‚��Ċ����ɓ��삵���P�̃e�X�g���A���̃N���X��AOP�V�X�e���ɓ��������ƁA�܂������قȂ铮�������ꍇ������B����g���āA�����������悤�B

�@�X�^�b�N�́A�������̂悤�ɁA�f�[�^���ڂ�������o���iLIFO�Flast-in first-out�j�̕��@�Œlj�����э폜���邽�߂̃f�[�^�\���ł���B�Ⴆ�΁A2�A4�A6�Ƃ������l���X�^�b�N�Ƀv�b�V�����A���̌�A�X�^�b�N��2��|�b�v����ƁA6��4�����̏����Ŏ��o�����B�X�^�b�N�E�N���X�̂��߂̒P�̃e�X�g���L�q����̂͊ȒP�ł���B�v����`�ƃR�[�h��ǂ݁A��������������Ă��邱�Ƃ��m�F����B�M�҂�AspectJ���g���n�߂��Ƃ��ɍŏ��ɍs�������Ƃ�1�‚́A�X�^�b�N���������A�A�X�y�N�g���g���Ă��̐U�镑�����ǂ̂悤�ɕύX�ł��邩���l���邱�Ƃ������B�M�҂́A�e���ڂ�1���‘�������Ƃ����ȒP�ȕύX�����������B�������ĒP�̃e�X�g�����s����Ɓ\�\�X�^�b�N��2�A4�A6���v�b�V�����A���2�‚̗v�f���|�b�v���āA����炪6��4�ł��邱�Ƃ��m�F����\�\���ʂ͎��s�ɏI���B�P�̃e�X�g�ɂ����āA�e�X�g����Ă���R�[�h�͕ς���Ă��Ȃ����A���̐U�镑�����ύX���ꂽ�̂ł���B���ʂ́A6��4�̑����7��5�����o�����B

�@����͂������ȗ�ł���A�����̏󋵂ł͋N����Ȃ����Ƃ�������Ȃ��B�������A���̗�́A���ӂ̂���v���O���}���ɂ߂ėe�Ղɑ����̔�Q��^�����邱�Ƃ������Ă���B���ӂ̂���v���O���}�͏����Ƃ��Ă��A�ύX�ɔ����ė\�����ʕ���p�������邽�߁A�����̌��ׂ���������”\��������B�ɂ߂đÓ��ȗ��R�̂��߂Ɏ��������A�X�y�N�g���A�����̃v���O�����@�\�ɑ΂��Ĉ��e�����y�ڂ��Ȃ����Ƃ�ۏ؂���̂́A��ύ���ł���B

�@3�Ԗڂ̖��́A�e�X�g�E�v���Z�X���̂��̂ł���B�c�[���Ǝ�@���J�����ꂽ�Ƃ��āA������L���Ɏg���ĊJ���S�̖̂ڕW��B������ɂ́A�e�X�g�E�v���Z�X���ǂ̂悤�ɏC��������悢�̂��낤���B����͑傫�Ȗ��ł͂Ȃ���������Ȃ����A�A�X�y�N�g���g���č쐬�����\�t�g�E�F�A���e�X�g���邽�߂ɂ́A�������Ă����Ȃ���΂Ȃ�Ȃ����ł���B

�� AOSD�̕��y�Ɋւ��邻�̂ق��̏��

�@AOSD�@�𓱓�����ꍇ�̍ł��傫�ȖW���ƂȂ�͕̂i���̖��ł��邪�A���ꂾ�����B��̏�ǂł͂Ȃ��BAOSD�͐V�����p���_�C���ł���B�ق��̃p���_�C���i�Ⴆ�΁A�I�u�W�F�N�g�w���\�t�g�J���j�����߂͂����������悤�ɁA�w�K�Ȑ����֌W���邽�߁A�L�����y����悤�ɂȂ�ɂ͎��Ԃ������邾�낤�B�܂����߂Ɋ�{�I�Ȏ�@�ƃ��J�j�Y�����w�K���A���ɍ��x�Ȏ�@���w�K���A���̌�ŁA�����̎�@��K�p���邽�߂̍őP�̕��@�ƁA����炪�ǂ̂悤�ȏꍇ�ɓK�؂ł��邩���w�K���Ȃ���΂Ȃ�Ȃ��B

�@�ƊE�ł�AOP�̕��y�ɂ́A�c�[�����傫�Ȗ������ʂ������낤�B�R���p�C����G�f�B�^�̂ق��ɁA���܂��܂ȃc�[�����K�v�ł���B�Ⴆ�΁A�V�X�e���ɂ‚��Ĕ��f������A���ݓI�ȉ��f�I�֐S�������ʂ�����A�A�X�y�N�g�����݂����ԂŃe�X�g���s�����肷�邽�߂ɖ𗧂ƒc�[�����K�v�ł���B�A�X�y�N�g��UML�ŕ\������ȂǁA�V�X�e�������K�؂ɕ\��������@���J�����ꂽ��A�c�[���������̕��@���T�|�[�g����悤�ɐi�����Ȃ���΂Ȃ�Ȃ��B

�@���̋L���ł�AspectJ�ɂ‚��Đ����������AAspectJ�͗B���AOP�̎����Ƃ����킯�ł͂Ȃ����AJava�p�̗B��̎����Ƃ����킯�ł��Ȃ��B�܂��A�ŋ߂ł́AAOP�Ɠ��l�̂��̂ق��̃p���_�C��������Ă��Ă���B�Ⴆ�΁AIBM�̌������iIBM Research�j�ł͊֐S���̑����������imulti-dimensional separation of concerns�j�Ƃ����p���_�C�����J������Ă���A���̎�����HyperJ�Ƃ����c�[���Ƃ��ē���”\�ł���ihttp://www.alphaworks.ibm.com/tech/hyperj�j�B�g�p���錾��ɑ΂���W���I�Ȏ������m�������܂ł́A�V�����p���_�C���̎g�p�ɂ̓��X�N�������BAspectJ�́A�i���̓r��ɂ���AOP�̎����i����j�ł���B���f�I�֐S�����܂ރ\�t�g�E�F�A���J���������A�J���Ŏg�p���������A�v���[�`���T�|�[�g����Ȃ��Ȃ��Ă��܂��A���邢�͑傫���ύX����Ă��܂��Ƃ������댯�́A�\���ɍl������B

�� �\�t�g�E�F�A�\�z�̂��ǂ����@�Ɍ�������

�@�m���ɁAAOP�����I�ɗ��p�ł���悤�ɂ��邽�߂̃c�[����v���Z�X�̊J���ɂ́A���΂炭���Ԃ������邾�낤�B�������A���̋L���ŏq�ׂ���肪�����ł��Ȃ����̂��Ƃ͎v��Ȃ��BAOP�̂��߂́A���т̂���c�[����v���Z�X���J���ł����Ƃ��ɁA���������D�ꂽ�\�t�g�E�F�A�\�z�̕��@��������ƐM���Ă���B

�@�A�W���C���E�v���Z�X�i��2�j�ɂ‚���Barry Boehm�����q�ׂĂ���悤�ɁAAOP�ɃA�v���[�`����ɂ͒��ӂ𕥂��K�v������BAOP�𑁁X�Ɠ�������ɂ��Ă��AAOP���嗬�ɂȂ�܂ő҂‚ɂ��Ă��A�\�t�g�E�F�A�ɑ΂��铊�����A��������я����ɂ����Ċm���ɖ����ł��錋�ʂ������炷�悤�ɂ��Ȃ���΂Ȃ�Ȃ��B���ꂪ����ȃr�W�l�X�E�Z���X�ł���B

�m�M�҂ɂ‚��ān

Gary Pollice

�@Gary Pollice���́A�}�T�`���[�Z�b�c�B�AWorcester��Worcester Polytechnic Institute�̋����ł���B�ނ̓\�t�g�E�F�A�H�w�A�݌v�A�e�X�g�A���̂ق��̃R���s���[�^�E�T�C�G���X�������Ă���A�w�������̃v���W�F�N�g���w�����Ă���B�w��̐��E�ɓ���O�́A�r�W�l�X�E�A�v���P�[�V��������R���p�C����c�[���Ɏ���܂ŁA���܂��܂Ȏ�ނ̃\�t�g�E�F�A�J����35�N�ȏ�s���Ă����BIT�ƊE�ł̔ނ̍Ō�̎d����IBM Rational Software�Ƃ̎d���ŁA�ނ́uRUP�̔�����v�ƌĂ΂�Ă����B�ނ́ARational Suite�̍ŏ��̊J���`�[���̃����o�[�ł���AAddison-Wesley�Ђ���2004�N�ɏo�ł��ꂽ�wSoftware Development for Small Teams�Fa RUP-Centric Approach�x�̎�v�Ȓ��҂ł�����B�܂��A���w�̊w�m���ƃR���s���[�^�E�T�C�G���X�̏C�m����L���Ă���B



�m�Q�l�����n
�@AOSD��AOP�ɋ�������������A�����Q�Ƃ��Ăق����B

���wCommunications of the ACM�x�i2001�N10���j�ɂ́AAOSD�Ɋւ���L���������f�ڂ���Ă���B

��Nicholas Lesiecki���ɂ��gImprove Modularity with Aspect-oriented Programming�h�ɂ́A������₷���T�v��������Ă���Bhttp://www-106.ibm.com/developerworks/java/library/j-aspectj/

��Nicholas Lesiecki���ɂ��gTest flexibility with AspectJ and mock objects�h�ɂ́A�P�̃e�X�g�ɖ𗧂�AOP�̎g�p���@��������Ă���Bhttp://www-106.ibm.com/developerworks/java/library/j-aspectj2/?open&l=007,t=gr

��Joseph D. Gradecki�������Nicholas Lesiecki���ɂ��wMastering AspectJ�x�́AJohn Wiley�Ђ���2003�N�ɏo�ł��ꂽ�B

�Q�l�����̂��ڂ������X�g�ɂ‚��ẮA�M�҂�Web�y�[�W�ɃA�N�Z�X���Ăق����Bhttp://www.cs.wpi.edu/~gpollice/Interests/AOSD.html

�m��1�n
�wMastering AspectJ�x�iJoseph D. Gradecki�����Nicholas Lesiecki���AJohn Wiley�ЁA2003�N�j��p.8���Q�ƁB

�m��2�n
�gGet Ready for Agile Methods, with Care�h�iBarry Boehm�AIEEE Computer�A2002�N1���j

�{�L���́uThe Rational Edge�v�Ɍf�ڂ��ꂽ�uA look at aspect-oriented programming�v���A�b�g�}�[�N�E�A�C�e�B���|�󂵂����̂ł��B

�uThe Rational Edge�v�o�b�N�i���o�[

Copyright © ITmedia, Inc. All Rights Reserved.

'; e_dlv.innerHTML = html; adRequest({position:dlv_pos,dom:true}); }else if(ad_type === 'gam'){ var html = '
'; e_dlv.innerHTML = html; refreshGam('InArtSpecialLink'); }else if(ad_type === 'logly'){ var html = '
'; e_dlv.innerHTML = html; loglySet(g_id); }else if(ad_type === 'google'){ var html = '
'; e_dlv.innerHTML = html; googletag.cmd.push(function(){ var slot8 = googletag.defineSlot('/43042345/nlab_artinsert_RT',[[336,280],[300,250],'fluid'],'div-gpt-ad-1551176482959-0').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); googletag.display('div-gpt-ad-1551176482959-0'); googletag.pubads().refresh([slot8]); }); } }; var insert_ok = function(_target,_str){ var clearfix = d.createElement('div'); clearfix.className = 'colBoxClear'; if(ad_float_fix){ e_body.insertBefore(e_dlv,_target); e_body.insertBefore(clearfix,_target.nextElementSibling); }else{ e_body.insertBefore(e_dlv,_target); } set_dlv(); }; var insert_ng = function(_str){ e_dlv.style.display = 'none'; }; var main = function(){ var e_nodes = e_body.childNodes; // BODY �����q�v�f var e_tags = []; // BODY �����^�O var p_num = []; // BODY ���� P �^�O�ʒu var p_target_num; // �g�}����ʒu var o_float = {}; // ��荞�ݗv�f var o_this = {}; // �A�N�e�B�u�^�O var o_next = {}; // �A�N�e�B�u�^�O�̎��̃^�O var flag_insert = 0; // �}���t���O // ��荞�ݗv�f�`�F�b�N var check_float = function(_e){ var e = 0; if(_e.id.match(/^col\d{3}(l|r)$/)){ e = _e; } return e; }; // �v�f�� Y ���W�ƍ����̍��v�l var get_element_y = function(_e){ var ey = 0; var eh = _e.offsetHeight; while(_e){ ey += _e.offsetTop; _e = _e.offsetParent; } return ey + eh; }; var check_ptag = function(_e){ var e = 0; if(_e.tagName && _e.tagName === 'P'){ e = _e; } return e; }; var try_insert = function(){ p_target_num = Math.floor(p_num.length / 2) - 1; if(p_target_num >= _maxrange) p_target_num = _maxrange; if(dis_con) p_target_num = 0; for(var i = p_num[p_target_num]; i < e_tags.length; i++){ o_this.e = check_ptag(e_tags[i]); if(o_this.e){ o_next.e = check_ptag(e_tags[i + 1]); if(o_next.e){ if(!o_float.e || check_float(e_tags[i - 1])){ o_float.e = check_float(e_tags[i - 1]); o_float.n = i - 1; } if(o_float.e && o_float.n < i + 1){ o_float.y = get_element_y(o_float.e); o_this.y = get_element_y(o_this.e); set_line(o_float.y,'red'); set_line(o_this.y,'blue'); if(o_float.y < o_this.y){ flag_insert = 1; insert_ok(o_next.e,_threshold + ' �p���ȏ��荞�݂���'); break; } }else{ flag_insert = 1; insert_ok(o_next.e,_threshold + ' �p���ȏ��荞�݂Ȃ�'); break; } } }else{ o_float = {}; } } if(!flag_insert){ insert_ng('�}���ʒu�Ȃ�'); } }; // �S�q�v�f����^�O�̂ݔz��ɓ���� for(var i = 0; i < e_nodes.length; i++){ if(e_nodes[i].tagName){ e_tags.push(e_nodes[i]); } } // �S�^�O���� P �^�O�ʒu��z��ɓ���� for(var i = 0; i < e_tags.length; i++){ if(e_tags[i].tagName === 'P') p_num.push(i); // �ŏ��̉�荞�ݗv�f���i�[ if(!o_float.e){ o_float.e = check_float(e_tags[i]); o_float.y = get_element_y(o_float.e); o_float.n = i; } } if(p_num.length >= _threshold){ try_insert(); }else{ insert_ng('P �^�O ' + _threshold + ' �ȉ�'); } }; if(e_body){ main(); }else{ insert_ng('�L���{���Ȃ�'); } })(document,4,5);
���Ȃ��ɂ������߂̋L��PR