The use of strict class naming is more prevalent within blenders source code than within third party addons. While CamelCase is common I don't think there is a strong convention for class names, however, the name used in bl_idname is visible and used within blender so does have some conventions, with a view to also help prevent naming clashes.
For a panel the convention is CATEGORY_PT_name and if not set will be the class name. Similarly, menus use CATEGORY_MT_name. Common categories are Object, Mesh and Material. Both of these can often be found duplicated into class names, often using class names instead of setting bl_idname. Within blender's builtin operators you will find most use this naming (with CAT_OT_name) for operator classes. There are also examples of CAT_UL_name used for UILists.
For an operator, the bl_idname must be two words separated by a ., the first word should be a category while the second is the operator name. Operator bl_idnames are added to bpy.ops so if you have bl_idname='mesh.beautify' then the operator can be called from python with bpy.ops.mesh.beautify() and is added to a panel with layout.operator('mesh.beautify').